Oracle SQL中的!=与<>

SELECT * FROM test_t WHERE ID != 1;

SELECT * FROM test_t WHERE ID <> 1;
的执行结果一样,有啥区别呢?能不能使用索引?谢谢!
那select * from t where name in ('a', 'b');和select * from t where name not in ('a', 'b');是否可以使用索引呢? 

“in 和 not in 都可以使用索引的,但是如果name字段有很多值,那么not in的执行时间应该稍微长一点,因为它返回的值比较多。”
这里的意思是说not in相当于多个where <>的条件?但如果这样岂不应该更快?因为条件限定得更严密? 

"补充:如果name的值比较少的话,in和not in条件严密性差不多,如果name值比较多的时候,in的严密性更高,索引都是按照顺序排好的,相等的情况只有一种,不等的情况有很多种。"
那如果是这种NOT IN的情况比较多时,还有别的方法替换么?谢谢!

BIG阳
浏览 546回答 1
1回答

慕哥9229398

第一个问题:这两个都是不等于符号,没有什么区别,如果这个字段有索引,都可以使用的。第二个问题:in 和 not in 都可以使用索引的,但是如果name字段有很多值,那么not in的执行时间应该稍微长一点,因为它返回的值比较多。补充:如果name的值比较少的话,in和not in条件严密性差不多,如果name值比较多的时候,in的严密性更高,索引都是按照顺序排好的,相等的情况只有一种,不等的情况有很多种。如果你('a', 'b')这些值是放在另外一个表里面,还有not exsits可以替换,如果是常量的话,貌似也只能这么写了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Oracle