SQL 语句调优(整理)(一)

来源:互联网 发布:新兴网络投资项目 编辑:程序博客网 时间:2024/06/05 05:17

面试笔试中经常会涉及到SQL的调优,然而,SQL性能上的优化可以通过修改系统配置但是其大部分来自对SQL语句的优化,在此我整理了一些面试笔试会用得到的SQL优化的小技巧!


1.查询的模糊匹配
尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用.
解决办法:
其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:
a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列就可以直接用等于来关联了。

b、直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个临时表里头,然后再用临时表去做复杂关联


2.法则:不要在建立的索引的数据列上进行下列操作:
◆避免对索引字段进行计算操作
◆避免在索引字段上使用not,<>,!=
◆避免在索引列上使用IS NULL和IS NOT NULL
◆避免在索引列上出现数据类型转换
◆避免在索引字段上使用函数
◆避免建立索引的列中使用空值


3.复杂操作
部分UPDATE、SELECT 语句 写得很复杂(经常嵌套多级子查询)——可以考虑适当拆成几步,先生成一些临时数据表,再进行关联操作


4.对Where 语句的法则
a、避免在WHERE子句中使用in,not  in,or 或者having。可以使用 exist 和not exist代替 in和not in。
b、可以使用表链接代替 exist。Having可以用where代替。

5.排序
避免使用耗费资源的操作,带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序

6.临时表
慎重使用临时表可以极大的提高系统性能

7.IS NULL 或IS NOT NULL操作(判断字段是否为空) 
判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。
推荐方案:用其它相同功能的操作运算代替

如:a is not null 改为 a>0 或a>’’等。不允许字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请

8.LIKE操作符 
LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。 

9.确保每个表都有主键


10.将TSQL代码从应用程序迁移到数据库中


11.在查询中不要使用“select *” 


12.在select清单中避免不必要的列,在连接条件中避免不必要的表


13.不要在子查询中使用count()求和执行存在性检查


10.使用全文搜索搜索文本数据,取代like搜索
 全文搜索始终优于like搜索:
(1)全文搜索让你可以实现like不能完成的复杂搜索,如搜索一个单词或一个短语,搜索一个与另一个单词或短语相近的单词或短语,或者是搜索同义词;
(2)实现全文搜索比实现like搜索更容易(特别是复杂的搜索);

0 0
原创粉丝点击