SQL调优导则

本文提供了一套实用的SQL调优策略,包括避免排序操作、利用查询条件尽早消除无用元组、谨慎使用视图及避免全表扫描等内容,旨在帮助数据库管理员和开发者提升SQL查询效率。

SQL调优导则
1.尽可能避免排序操作。因此对下列语法成分或操作,必须慎用:
 a.DISTINCT
 b.集合操作UNION ,INTERSECTION, EXCEPT (MINUS)
 c.GROUP BY,ORDER BY子句
 d.排序归并连接法(除非参与连接的表已经按连接属性排序)
 e.建立簇集索引等

2.利用查询条件,尽可能早地消除无用元组,以缩小中间结果:
 a.能用WHERE子句表示的查询条件,不要放在HAVING子句中。
 查询计算机系所开课程的平均成绩和最高成绩:
 SELECT  C.CNO,AVG(SC.GRADE),MAX(SC.GRADE)
 FROM  SC,COURSE  C
 WHERE  C.CNO=SC.CNO
 GROUP  BY C.CNO
 HAVING  C.CNO=‘CS%’;
 改写后的查询:
 SELECT  C.CNO,AVG(SCGRADE),MAX(SC.GRADE)
 FROM  SC,COURSE  C
 WHERE  C.CNO=‘CS%’ AND  C.CNO=SC.CNO
 GROUP BY  C.CNO
 b.当心在语句中出现笛卡尔乘积(即无连接条件的连接),慎用外连接、外并操作、非等连接(即连接条件中出现非等号比较符)等操作。
 c.在多元连接时,须将选择性高、元组少的表列在FROM子句的前两位,其他表也要按选择性高和元组数少优先原则依次排序,以缩小中间结果。
3.大量加载数据时,不要用INSERT语句:应利用加载工具,例如Oracle中的SQL*Loader
4.EXISTS,IN的应用:慎用关联嵌套子查询,在多数情况,IN比EXISTS较为有利。
5.不滥用视图
 视图是按其定义临时生成的中间结果,没有索引之类的存取路径可用。
 虽然允许视图的定义中再引用其他视图,但就性能而言,这种多层嵌套的视图不值得采用。如果不是出于安全、保密等的考虑,可将视图定义合并到FROM子句中。
6.当心查询优化器选择全表扫描:如果查询条件中出现比较符“<>”或“IS  NULL”等,则查询优化器一般选择全表扫描。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值