如今, 假设 EMP_TYPE 是一个字符类型的索引列.
两者的差别在于, 前者 DBMS 将直接跳到第一个 DEPT 等于 4 的记录而后者将起首定位到 DEPTNO=3 的记录并且向前扫描到第一个 DEPT 大年夜于 3 的记录。
SELECT … FROM EMP WHERE EMP_TYPE = 123
这个语句被 ORACLE 转换为:
SELECT … FROM EMP WHERETO_NUMBER(EMP_TYPE)=123
因为内部产生的类型转换, 这个索引将不会被用到! 为了避免 ORACLE 对你的 SQL 进行隐式的类型转换, 最好把类型转换用显式表示出来. 留意当字符和数值比较时, ORACLE 会优先转换数值类型到字符类型
(31) 须要当心的 WHERE 子句
某些 SELECT 语句中的 WHERE 子句不应用索引. 这里有一些例子.
鄙人面的例子里, (1)‘!=’ 将不应用索引. 记住, 索引只能告诉你什么存在于表中, 而不克不及告诉你什么不存在于表中. (2) ‘||’是字符连接函数. 就象其他函数那样, 停用了索引. (3) ‘+’是数学函数. 就象其他数学函数那样, 停用了索引. (4) 雷同的索引列不克不及互比拟较, 这将会启用全表扫描.
(32)
a. 如不雅检索数据量跨越 30% 的表中记录数,应用索引将没有明显的效力进步。
b. 在特定情况下, 应用索引也许会比全表扫描慢, 但这是同一个数量级上的差别。而平日情况下,应用索引比全表扫描要块几倍甚至几千倍!
(33) 避免应用消费资本的操作
履行消费资本的排序 (SORT) 功能。DISTINCT 须要一次排序操作, 而其他的至少须要履行两次排序。 平日, 带有 UNION, MINUS, INTERSECT 的 SQL 语句都可以用其他方法重写。 如不雅你的数据库的 SORT_AREA_SIZE 调配得好,应用 UNION , MINUS, INTERSECT 也是可以推敲的,毕竟它们的可读性很强。
(34) 优化 GROUP BY
进步 GROUP BY 语句的效力, 可以经由过程将不须要的记录在 GROUP BY 之前过滤掉落。下面两个萌芽返回雷同结不雅但第二个明显就快了很多。
低效:
以上就是 SQL 优化经验总结 34 条的全文介绍, 欲望对您进修和应用 Oracle 有所赞助。
【编辑推荐】
- MongoDB数据库入门的5个简单步调
- 开源NoSQL数据库:ArangoDB入门指南
- 关系数据库迈入新时代,这个标题是卖力的!
- MySQL数据库渗入渗出及马脚应用总结
- 细说碉堡机与数据库审计
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践【51CTO.com稿件】2017年11月8日,润乾软件和永洪科技举办了计谋合作签约典礼。出席签约典礼的有润乾软件开创人蒋步星、>>>详细阅读
本文标题:干货满满,SQL优化经验总结34条~
地址:http://www.17bianji.com/lsqh/38694.html
1/2 1