我有一個mysql表,索引INT列將爲90%的行爲0。如果我將這些行更改爲使用NULL而不是0,那麼它們是否會被排除在索引之外,從而使索引大小縮小了90%?mysql的索引是否爲空值?
回答
您是如何得出這個結論的?我沒有看到這個話題。 – 2008-11-14 02:12:16
這是在文章底部的評論。我拿出相關部分。 – 2008-11-14 02:18:15
我相信它在大型表上需要一段時間的原因是因爲MySQL必須讀取整個表格,而不是因爲它正在構建一個巨大的索引。我可能是錯的。 – 2008-11-14 02:38:19
不,它會繼續包括它們,但不要對這兩種情況下的後果做出太多假設。很大程度上取決於其他值的範圍(谷歌爲「基數」)。
對於這種類型的情況(即包括基於過濾器的索引中的記錄),MSSQL具有稱爲「過濾索引」的新索引類型。 dBASE類型的系統曾經有類似的功能,而且非常方便。
允許列爲空將爲該列的存儲需求添加一個字節。這將導致索引尺寸增加,這可能不太好。這就是說,如果很多查詢被改爲使用「IS NULL」或「NOT NULL」,它們可能比進行值比較更快。
我的直覺告訴我不爲null,但有一個答案:測試!
http://dev.mysql.com/doc/refman/5.0/en/is-null-optimization.html
MySQL能在COL_NAME執行相同的優化IS NULL,它可用於COL_NAME = constant_value。例如,MySQL可以使用索引和範圍來搜索帶NULL的NULL NULL
每個索引都有一個基數意味着索引了多少個不同的值。 AFAIK說索引對許多行重複相同的值是不合理的想法,但索引只會將許多行的聚集索引的重複值(對於此字段具有空值的行)重複值並保持聚集索引的引用ID意思是:每個有NULL索引字段的行浪費了一個與PK大小相同的大小(因爲這個原因,如果你有複合PK,專家建議有一個合理的PK大小)。
- 1. mysql 5.0的索引是否爲空值?
- 2. 我的MySQL索引是否有效?
- 3. mysql查詢是否爲空
- 4. Mysql Innodb在大多數爲空值的列上建立索引
- 5. 如何檢索空的OPTION值是否爲空?
- 6. MySQL - ROUND()是否利用索引?
- 7. 是否索引< or > MySQL查詢?
- 8. MySQL是否在使用索引?
- 9. 檢查數組對象中特定索引的所有值是否爲空?
- 10. 如何檢查Elasticsearch中的索引是否爲空?
- 11. 動態數組的索引是否爲空?
- 12. 加入空間mysql索引
- 13. MySQL是否在創建新索引時使用現有索引?
- 14. 綁定值在索引1爲空
- 15. 如何檢查Arraylist索引是否爲空
- 16. PHP - 檢查數組索引是否存在或爲空
- 17. 補空的索引向量是空的索引向量再次
- 18. 我是否需要爲MySQL創建索引?
- 19. 爲MySQL InnoDB聚集索引使用組合主鍵是否好?
- 20. mysql索引是否將UTF-8轉換爲ASCII?
- 21. 空索引向量的補碼是空索引向量
- 22. MySQL查詢,以檢查是否值是空/空
- 23. MySql - 如果一列中的索引被定義爲唯一的,它是否是冗餘索引?
- 24. MySQL檢測字段是否爲空
- 25. mysql檢查是否爲空字段
- 26. AddServiceEndpoint引發鍵是否爲空?
- 27. MySQL中的空間索引大小
- 28. 測試C宏的值是否爲空
- 29. 搜索鏈接列表是否爲空
- 30. 的MySQL創建索引名與空白唯一索引
優秀問題 – 2015-11-25 08:42:58