发布网友 发布时间:2022-04-22 17:03
共4个回答
热心网友 时间:2023-11-13 10:30
我可以发给你oracle语句调优和索引使用指南的文档,应该对你有帮助,你的邮箱发一下吧
另外回答你的问题
1.在索引列上使用函数是很少能使用索引的,即使使用了索引函数也很难保证走索引,这就是oracle的内部的机制,在cbo之后,oracle以cost作为最优plan的标准,这方面的内容要说的话就多了,你可以参看我给的文档,自己体会
2.在not,or类似这种非的查询是不走索引的,你可以用join来避免not的用法。
有问题继续追问追问您说的2是什么意思呢?怎么能用join代替not?可否举个例子
追答1、not举例:
SELECT * FROM emp WHERE deptno NOT IN
(SELECT deptno FROM dept WHERE loc = 'DALLAS'); SELECT e.* FROM emp e WHERE NOT EXISTS (SELECT 1FROM dept WHERE deptno = e.deptno AND loc = 'DALLAS'); -->最高效(尽管下面的查询最高效,并不推荐使用,因为列loc使用了不等运算,当表dept数据量较大,且loc列存在索引的话,则此时索引失效,具体情况具体分析) SELECT e.* FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno
WHERE d.loc 'DALLAS' ;
2、or举例
select * from emp where empid=1 or empid=2;
--->高效
select * from emp where empid=1
union all
select * from emp where empid=2;
sql的优化较实际情况而定,没有绝对的公式可以套,可能相同的执行计划在不同硬件环境下的效率是不同的,这方面还是有很多东西可以学的。
热心网友 时间:2023-11-13 10:30
可以把 to_char(mydate) 也建立索引追问那to_char(mydate,'yyyy'),to_char(mydate,'yyyy-mm'),to_char(mydate,'yyyy--mm-dd')都要建立索引吗?
追答哪个用的多就在哪个上建索引,索引并不是越多越好的
热心网友 时间:2023-11-13 10:31
了。批。。[批。;
热心网友 时间:2023-11-13 10:31
有2种方法
kao,写不上
给你发消息了。追问还有个问题,先谢谢哈,我在一个number列上如aa建立了索引,为什么where后面拼接上and(aa0)后,在plsqldeveloper中按F5查看性能时,没有按照aa进行索引查找
追答or 很多情况下无法使用索引
另外,使用索引也是有条件的,比如你有100万数据,而99万符合条件,
这个时候肯定不会使用索引,
而会用全表扫描