美图欣赏 | 设为首页 | 加入收藏 | 网站地图

当前位置:电脑中国 > 数据库 > MSSQL >

sql查询优化

2017-09-05 15:15|来源:未知 |作者:dnzg |点击:

查询优化:

在存有生产环境数据副本的开发环境中,测试所有可疑的查询。

1、使用慢查询日志,找出执行慢的查询。

2、使用 EXPLAIN 来决定查询功能是否合适。

3、避免在整个表上使用count(*) ,它可能会将整个表锁住;count(1)统计主键的数目;count(*)统计整个表格的数目。

4、保持查询一致,这样后续类似的查询就能使用查询缓存了。

5、如果合适,用 GROUP BY 代替 DISTINCT。

6、在 WHERE、GROUPBY 和 ORDER BY 的列上加上索引。

7、保证索引简单,不要在同一列上加多个索引。

8、有时,MySQL 会选择错误的索引,这种情况使用 USE INDEX。(没用过)

9、索引字段少于5个时,UNION操作用 LIMIT,而不是 OR。(没用过)

10、使用 INSERT ON DUPLICATE KEY 或 INSERT IGNORE 来代替 UPDATE,避免 UPDATE 前需要先 SELECT。(没用过)

11、使用索引字段和 ORDER BY 来代替 MAX。

12、避免使用 ORDER BY RAND()。

13、LIMIT M,N 在特定场景下会降低查询效率,有节制使用。(没用过)

14、使用 UNION 来代替WHERE 子句中的子查询。

15、使用 DROP TABLE ,然后再 CREATE TABLE ,而不是 DELETE FROM ,以删除表中所有数据。

16、最小化你要查询的数据,只获取你需要的数据,通常来说不要使用 *。(从表中读取越多的数据,查询会变得更慢。他增加了磁盘需要操作的时间,还是在数据库服务器与WEB服务器是独立分开的情况下。你将会经历非常漫长的网络延迟,仅仅是因为数据不必要的在服务器之间传输。始终指定你需要的列,这是一个非常良好的习惯。)

17.保证连接的索引是相同的类型

如果应用程序中包含多个连接查询,你需要确保你链接的列在两边的表上都被索引。这会影响MySQL如何优化内部联接操作。此外,加入的列,必须是同一类型。

18.通常情况下,子查询的性能比较差,建议改造成JOIN写法

(责任编辑:dnzg)