现在的位置: 首页 > 综合 > 正文

查询优化

2013年02月26日 ⁄ 综合 ⁄ 共 1135字 ⁄ 字号 评论关闭
文章目录

优化查询常用方法如下:

1、合理使用索引

索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。索引的使用要恰到好处,使用原则如下:

  • 经常在查询中作为条件被使用的列,应为其建立索引。
  • 频繁进行排序或分组(即进行group by或order by操作)的列,应为其建立索引。
  • 一个列的值域很大时,应为其建立索引。
  • 如果待排序的列有多个,应在这些列上建立复合索引。
  • 可以使用系统工具来检查索引的完整性,必要时进行修复,别外,当数据库表更新大量的数据后,删除并重建索引可以提高查询速度。

2、避免或简化排序

应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就可以避免不必要的排序步骤。

以下是一些影响因素:

  • 由于现有索引的不足,导致排序时索引中不包括一个或多个待排序的列。
  • group by 或order by子句中列的次序与索引的次序不一样。
  • 排序的列来自不同的表。

为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当简化它,如缩小排序列的范围。

3、消除对大型表行数据的顺序存取

在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。

4、避免相关子查询

查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过虑掉可能多的行。

5、避免困难的正规表达式

避免含matches和like关键字的正规表达式。

6、使用临时表加速查询

把表的一个子查询进行排序并创建临时表,有时可以加速查询。

7、用排序取代非顺序磁盘存取

非顺序磁盘存取是最慢的操作。有些时候,可以使用以数据库排序功能为基础的sql来替代非顺序的存取,以改进查询效率。

8、不充分的连接条件

左(右)连接消耗的资源非常之多,因为它们包含与null(不存在)数据匹配的数据,其代价可能非常高。左(右)连接比内连接消耗资源更多,所以如果可以重新编写查询,使得该查询不使用任何左(右)连接,则会得到非常可观的回报。

9、存储过程

对于频繁使用的sql语句建议使用存储过程。别外,要注意存储过程尽量使用sql自带的返回参数,而非自定义的返回参数,减少不必要的参数,避免数据冗余。

10、不要随意使用游标

游标会占用比较多的资源,尤其是对于大规模并发量的情况下,很容易使得资源耗尽而崩溃。所以,不要随意使用游标,而且游标使用完成后就及时关闭和销毁,以释放资源。

11、事务处理

为了同时操作多个表而保证数据库的一致性,往往会用到事务。但是一旦将多个处理放入事务当中,系统的处理速度会有所降低,所以应当在保证数据库一致的前提下,将频繁操作的多个可分割的处理过程放入到存储过程当中去,这样会大大提高系统的响应速度。

抱歉!评论已关闭.