為什麼索引無法使用is null和is not null
一般來說,表的索引都會建立在非空欄位。
當查詢時:
在where 語句種篩選 idx is null 時,由於索引欄位不為空,所以該條件失效,無法查詢;
在where 語句種篩選 idx is not null 時,由於索引欄位本身不為空,所以該條件也失效,會造成全表掃描;
對於使用LEFT JOIN和IS NULL來替換NOT IN,和使用LEFT JOIN和IS NULL來替換IN邏輯的情況下,縱使連線時使用的欄位為各表的索引欄位,依然可以對該索引欄位進行IS NULL和IS NOT NULL的過濾。
這是因為左連線之後進行的where篩選,實際上是在兩個表左連線之後的臨時表上進行的篩選,對於這個臨時表,只存在兩表的欄位組合,相應索引欄位也不再存在索引屬性,因此依然可以使用IS NULL和IS NOT NULL的過濾。
相關文章
- MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!MySqlNull索引
- NULL列時,如何使得IS NULL或者IS NOT NULL可以使用索引來提高查詢效率Null索引
- 為什麼資料庫欄位要使用NOT NULL?資料庫Null
- 為什麼typeof null 的結果為 objectNullObject
- 索引與null(二):組合索引索引Null
- 索引與null(一):單列索引索引Null
- 為什麼if中null要寫在前面?Null
- 返回的 json 串 sessionId 為什麼是 nullJSONSessionNull
- javascript中null是什麼JavaScriptNull
- Object.create(null) 和 {} 區別是什麼ObjectNull
- /dev/null和標準*使用devNull
- dart系列之:和null說再見,null使用最佳實踐DartNull
- NULL在oracle和mysql索引上的區別NullOracleMySql索引
- 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的區別devNull
- 為什麼HashMap的鍵值可以為null,而ConcurrentHashMap不行?HashMapNull
- null 和 undefinedNullUndefined
- MySQL null值欄位是否使用索引的總結MySqlNull索引
- ">/dev/null 2>&1 "是什麼意思devNull
- MySQL為何不建議使用null列MySqlNull
- MySQL null和''分析MySqlNull
- 為什麼hashtable不允許設定Null但是hashmap允許?NullHashMap
- 【NULL】Oracle null值介紹NullOracle
- Oracle的null和空串【一切有為法,如夢幻泡影 】OracleNull
- [20231024]NULL值在索引的情況.txtNull索引
- 你真的知道typeof null的結果為什麼是‘object‘嗎?NullObject
- undefined 和 null 區別?UndefinedNull
- null和undefined區別NullUndefined
- undefined會變為null嗎?UndefinedNull
- null調整為not null default xxx,不得不注意的坑Null
- 使用反射建立窗體物件時,物件為NULL反射物件Null
- TypeScript Null和Undefined 型別TypeScriptNullUndefined型別
- null 和 undefined 的區別NullUndefined
- null 和 undefined 的區別!NullUndefined
- PropertyChanged == nullNull
- MySQL NULLMySqlNull
- 我天!xx.equals(null) 是什麼騷操作??Null
- Controller內注入的Service為nullControllerNull
- MySQL null值儲存,null效能影響MySqlNull