频道栏目
首页 > 资讯 > SQL Server > 正文

关于SQL优化的几种方法介绍

18-06-27        来源:[db:作者]  
收藏   我要投稿

说到优化,主讲会索引和分区,引导到讲索引上去,索引要好好熟悉和使用。

索引优化规则:

(1)like件中不要以通配符(WILDCARD)开始,否则索引将不被采用.

(2)避免在索引列上使用计算或改变索引列的类型或使用‘!=’及<>

(3)避免在索引列上使用NOT .

(4)用>=替代> .

高效: SELECT * FROM EMP WHERE DEPTNO>=4

低效: SELECT * FROM EMP WHERE DEPTNO>3

两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录.

(5)用UNION替换OR (适用于索引列) 通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择O规则R而降低.

(6)避免在索引列上使用IS NULL和ISNOT NULL

避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引.

对于单列索引,如果列包含空值,索引中将不存在此记录. 对于复合索引,如果每个列都为空,索引中同样不存在此记录.如果至少有一个列不为空,则记录存在于索引中. (建议:可以给null值的字段设置一个默认值

(7)如果索引是建立在多个列上,索引时段需要放在where 条件的第一个条件(Oracle8i之 前),Oracle8i之后允许跳跃式索引.

(8)(可能的话)用UNION-ALL 替换UNION. UNION-ALL就是做简单的合并,不会进行排序,UNION先做简单的合并,然后做进行排序,最后去除重复的记录。

(9)避免使用耗费资源的操作

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

例如,一个UNION查询,其中每个查询都带有GROUP BY子句,GROUP BY会触发嵌入排序(NESTED SORT) ; 这样, 每个查询需要执行一次排序, 然后在执行UNION时, 又一个唯一排序(SORTUNIQUE)操作被执行而且它只能在前面的嵌入排序结束后才能开始执行. 嵌入的排序的深度会大大影响查询的效率.

通常, 带有UNION,MINUS , INTERSECT的SQL语句都可以用其他方式重写.

(10)用NOT EXISTS 或(外连接+判断为空)方案替换NOT IN操作符

相关TAG标签
上一篇:MySQL:事务,备份,恢复等实例讲解
下一篇:尝试加载Oracle客户端库时引发BadImageFormatException的问题记录和解决方式
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站