分类目录

链接

2012年七月
« 6月   8月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

近期文章

热门标签

博主推荐

现在位置:    首页 > SQL Server > 正文
SQL优化经验总结8
SQL Server 暂无评论 阅读(1,698)

因为内部发生的类型转换, 这个索引将不会被用到! 为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型

(31) 需要当心的WHERE子句:

 

某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.

 

在下面的例子里, (1)‘!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. (2) ‘||'是字符连接函数. 就象其他函数那样, 停用了索引. (3) ‘+'是数学函数. 就象其他数学函数那样, 停用了索引. (4)相同的索引列不能互相比较,这将会启用全表扫描.

 

(32) a. 如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高.

 

b. 在特定情况下, 使用索引也许会比全表扫描慢, 但这是同一个数量级上的区别. 而通常情况下,使用索引比全表扫描要块几倍乃至几千倍!

 

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

 

带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎

 

执行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序. 通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以用其他方式重写. 如果你的数据库的SORT_AREA_SIZE调配得好, 使用UNION , MINUS, INTERSECT也是可以考虑的, 毕竟它们的可读性很强

 

(34) 优化GROUP BY:

 

提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.下面两个查询返回相同结果但第二个明显就快了许多.

 

低效:

 

 

SELECT JOB , AVG(SAL)
FROM EMP
GROUP by JOB
HAVING JOB = ‘PRESIDENT'
OR JOB = ‘MANAGER'

 

高效:

 

 

SELECT JOB , AVG(SAL)
FROM EMP
WHERE JOB = ‘PRESIDENT'
OR JOB = ‘MANAGER'
GROUP by JOB

 

本文版权归数据库之家所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:SQL优化经验总结8 | 数据库之家

发表评论

留言无头像?