我有一个MySQL表,其中INT
90%的行的索引列将为0。如果我将这些行改为使用NULL
而不是使用0,是否会将它们排除在索引之外,从而使索引缩小约90%?
Answers:
http://dev.mysql.com/doc/refman/5.0/en/is-null-optimization.html
MySQL能够执行在相同的优化col_name IS NULL
,它可以使用col_name = constant_value
。例如,MySQL可以使用索引和范围来搜索NULL
with IS NULL
。
允许列为空将为该列的存储需求添加一个字节。这将导致索引大小增加,这可能不是很好。这就是说,如果将许多查询更改为使用“ IS NULL”或“ NOT NULL”,它们的整体速度可能比进行值比较快。
我的直觉会告诉我不是null,但是有一个答案:测试!
只是为了为该主题带来更多信息。看一看您的表首先使用哪种存储引擎。
如果使用的是MyISAM,InnoDB或MEMORY存储引擎,则可以在具有NULL值的列上添加索引。否则,您必须声明一个索引列NOT NULL,并且您不能在该列中插入NULL。
https://dev.mysql.com/doc/refman/8.0/zh-CN/problems-with-null.html