引言
- 本文小结了数据查询的优化方案;
查询耗时点
- 解析SQL语句时间;
- 磁盘存取(查询所用CPU时间);
- 磁盘IO;
- 并行/分布式数据库的网络通信时间;
- 其中,磁盘存取一般认为是耗时最多的点;
数据库层面的优化
- 优化器设计(可将用户输入语句转换为等价的效率更高的执行语句);
- 优化索引设计;
- 优化查询算法:
- 在等价的查询语句中,选择读磁盘最少的那个;
- 对于简单的查询语句,可通过线性扫描和搜索引擎处理;
- 对于复杂的查询,将它转换为简单查询的并和交;
- 用外部归并排序算法对大于内存的关系进行排序;
用户层面的优化
- 避免出现SELECT * FROM table 语句,要明确查出的字段;
- 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移;
- 使用内层限定原则,在拼写SQL语句时,将查询条件分解、分类,并尽量在SQL语句的最里层进行限定,以减少数据的处理量;
- 在判断有无符合条件的记录时建议不要用SELECT COUNT (*)和select top 1 语句;
- 小心使用 IN 和 OR,需要注意In集合中的数据量,建议集合中的数据不超过200个;
- 应绝对避免在order by子句中使用表达式;
<>
用<
、>
代替,>
用>=
代替,<
用<=
代替,这样可以有效的利用索引;- 如果需要从关联表读数据,关联的表一般不要超过7个;
- 在一个事务中,对同一个表的多个insert语句应该集中在一起执行;