我有一个MySQL表格,其中一个索引的INT
列90%的行将为0。如果我将这些行改为使用NULL
而不是0,它们会被排除在索引之外,使索引减少约90%吗?
http://dev.mysql.com/doc/refman/5.0/en/is-null-optimization.html
MySQL可以对col_name IS NULL
进行与col_name = constant_value
相同的优化。例如,MySQL可以使用索引和范围来搜索IS NULL
的NULL
。
允许一个列为空将会增加该列的存储需求一个字节。这将导致索引大小增加,可能不太好。但是,如果您的查询大量使用“IS NULL”或“NOT NULL”,它们可能比进行值比较更快。
我的直觉告诉我应该选择非空,但有一个答案:测试!
不会,它将继续包含它们,但不要对任何一种情况的后果做出太多假设。很多事情取决于其他值的范围(可以在谷歌上搜索“基数”)。
MSSQL有一种新的索引类型,称为“过滤索引”,用于这种类型的情况(即根据过滤器在索引中包含记录)。类似的功能曾经在dBASE类型的系统中存在过,非常方便。