我意識到確切的問題已被問及堆棧溢出之前只有一個模糊的結論性答案:linkmysql 5.0的索引是否爲空值?
所以這裏再次。
表A:有一個可以爲空的整數列和一個索引。 查詢:
SELECT *
FROM table
WHERE column IS NULL
LIMIT 10;
將一個索引使用,或將在mysql做一個全表掃描,直到它已發現10項?
我意識到確切的問題已被問及堆棧溢出之前只有一個模糊的結論性答案:linkmysql 5.0的索引是否爲空值?
所以這裏再次。
表A:有一個可以爲空的整數列和一個索引。 查詢:
SELECT *
FROM table
WHERE column IS NULL
LIMIT 10;
將一個索引使用,或將在mysql做一個全表掃描,直到它已發現10項?
我想這應該是有幫助的:
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
使用COL_NAME一個搜索IS NULL採用索引如果COL_NAME是 索引。
要確切地知道您的具體情況的唯一方法是對您的查詢運行「EXPLAIN SELECT」。
它確實取決於表中NULL的數量與總行數的比較;是否已更新表格統計信息等等......
您必須分析查詢。一般來說,它取決於NULLs
相對於數值的百分比。如果該整數列中的大多數條目是NULL,那麼它可能會跳過它。
另一方面,如果只有10%(例如)是NULL
,它將(或應該)使用該索引。
有一個簡單的方法來知道它。
您可以執行此命令show index from tablename
,它會返回一些分析結果,其中一個稱爲NULL。
如果NULL等於YES,您的索引中包含NULL
謝謝主席先生。我只需要對此進行回顧。而且我想補充說,未來的任何人都會在這個頁面上看到你的答案是最好的。 – usumoio 2013-03-18 17:56:22
謝謝。非常高興這是有幫助的。 – 2013-03-20 21:52:19