Java教程

sql 调优

本文主要是介绍sql 调优,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 建立索引

  在经常需要进行检索的字段上创建索引,如 WHERE,JOIN ,ORDER BY。

  索引并不是越多越好。索引固然可以提高相应的 select 效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引。

  避免在索引上使用计算。

  

 

2. 使用预编译

  如存储过程、视图。

 

3. where 顺序

  过滤掉最大数量记录在前。

 

4. 尽量将多条 sql 压缩到一条 sql 语句之中

  每次执行 sql 的时候都要建立网络连接、进行权限校验、进行SQL语句的查询优化、发送执行结果,这个过程是非常耗时的。

 

5. 用 where 代替 having

  因为 having 只会在检索出所有记录之后才对结果集进行过滤,而 where 则是在聚合前筛选记录。

  但 having 可以结合聚合函数使用,where 不行。

 

6. 使用表的别名

  如联表查询时,可以减少解析的时间。

 

7. union all 代替 union

  如果可以判断检索结果中不会有重复的记录时候,应该用 union all。

 

8. 使用临时表暂存中间结果

  将临时结果暂存在临时表,后面的查询就在 tempdb 中了。这可以避免程序中多次扫描主表,也大大减少了程序执行中 "共享锁" 阻塞 "更新锁",减少了阻塞,提高了并发性能。 

  但是也得避免频繁创建和删除临时表,以减少系统表资源的消耗。

 

9. 尽量不要用游标。

  游标详解:https://www.cnblogs.com/jdzhang/p/7576520.html

 

10. 使用 varchar/nvarchar 代替 char/nchar。

  为列选择合适的数据类型,磁盘和内存消耗越小越好。

 

11. 如果不查询表中所有的列,尽量避免使用 "SELECT * ",因为它会进行全表扫描。

 

12. 明知只有一条查询结果,那请使用 "LIMIT 1",可以避免全表扫描,找到对应结果就不会再继续扫描了。

 

13. 对于连续的数值,能用 between 就不要用 in。

eg: select id from t where num in(1,2,3) >>> select id from t where num between 1 and 3

 

14. 避免前置百分号。

eg:select id from t where name like ‘%abc%’

  若要提高效率,可以考虑全文检索:https://www.cnblogs.com/zzm96/p/12747029.html

 

15. 更新 update 语句优化。

  如果只更改 1、2 个字段,不要 update 全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

 

16. with(nolock):查询时不锁定表,从而达到提高查询速度。

缺点:

  可能造成脏读。

使用场景:

  数据量特别大的表,牺牲数据安全性来提升性能;

  允许出现脏读现象的业务逻辑;

  数据不经常修改的表。

 

17. expain 命令查看 sql 执行计划,详解:https://www.cnblogs.com/tufujie/p/9413852.html

这篇关于sql 调优的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!