ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql 调优

2021-09-23 14:34:37  阅读:148  来源: 互联网

标签:update 查询 索引 调优 sql where select


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

标签:update,查询,索引,调优,sql,where,select
来源: https://www.cnblogs.com/Allofus/p/15324044.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有