索引列上的NOT
操作,真心别乱用。你没注意,但NOT
一旦出现,Oracle 就不走索引了,直接全表扫描,响应速度直接翻车。
像DEPT_CODE NOT = 0
这种写法,看起来挺正常,但效率惨不忍睹。改成DEPT_CODE > 0
,Oracle 就能老老实实用上索引,查询性能马上提上来。
其实原理也不复杂:NOT 和函数操作一样,Oracle 懒得猜,干脆全表扫了事。用范围判断,才是和索引配合最顺的打开方式。
如果你手头的 SQL 跑得慢,不妨先查查有没有用NOT
。搞不好就是它在拖后腿。顺手推荐几个文章,讲得还蛮透的:
如果你在写报表或者接口查询的 SQL,遇到字段判断条件时,一定记得多想一秒——是不是用了NOT
?能不用就别用,性能上差距还挺大的。