SELECT * FROM test_t WHERE ID != 1;與SELECT * FROM test_t WHERE ID <> 1;的執(zhí)行結(jié)果一樣,有啥區(qū)別呢?能不能使用索引?謝謝!那select * from t where name in ('a', 'b');和select * from t where name not in ('a', 'b');是否可以使用索引呢? “in 和 not in 都可以使用索引的,但是如果name字段有很多值,那么not in的執(zhí)行時(shí)間應(yīng)該稍微長(zhǎng)一點(diǎn),因?yàn)樗祷氐闹当容^多?!边@里的意思是說not in相當(dāng)于多個(gè)where <>的條件?但如果這樣豈不應(yīng)該更快?因?yàn)闂l件限定得更嚴(yán)密? "補(bǔ)充:如果name的值比較少的話,in和not in條件嚴(yán)密性差不多,如果name值比較多的時(shí)候,in的嚴(yán)密性更高,索引都是按照順序排好的,相等的情況只有一種,不等的情況有很多種。"那如果是這種NOT IN的情況比較多時(shí),還有別的方法替換么?謝謝!
2 回答

慕慕森
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
第一個(gè)問題:
這兩個(gè)都是不等于符號(hào),沒有什么區(qū)別,如果這個(gè)字段有索引,都可以使用的。
第二個(gè)問題:
in 和 not in 都可以使用索引的,但是如果name字段有很多值,那么not in的執(zhí)行時(shí)間應(yīng)該稍微長(zhǎng)一點(diǎn),因?yàn)樗祷氐闹当容^多。
補(bǔ)充:如果name的值比較少的話,in和not in條件嚴(yán)密性差不多,如果name值比較多的時(shí)候,in的嚴(yán)密性更高,索引都是按照順序排好的,相等的情況只有一種,不等的情況有很多種。
如果你('a', 'b')這些值是放在另外一個(gè)表里面,還有not exsits可以替換,如果是常量的話,貌似也只能這么寫了。
- 2 回答
- 0 關(guān)注
- 760 瀏覽
添加回答
舉報(bào)
0/150
提交
取消