基于 this question我相信 mysql 确实索引空值。 我正在尝试优化一个 sql server,我想知道服务器是否有索引空值;有没有办法检查 NULL 值的索引?
最佳答案
无视,无视,无视!
对于 NULL,索引是 0 字节、1 字节、2 字节还是几个字节——这在总体方案中无关紧要。
BTree(您正在谈论的索引是 BTree)向下钻取的级别非常少(10 亿 行可能有 5 个级别)。即使索引中的每个“行”的大小都翻了一番,BTree 可能仍然只有 5 层深。 “5”是一次“点查询”的费用。这与条目中的绒毛无关。
手册页可能是 MyISAM 是唯一引擎时的遗留问题。 InnoDB 的出现不一定会更新像这样的详细信息,更不用说它的 4 个 ROW_FORMATs
。
也不要相信EXPLAIN
。当它说 Key_len
时,它只提供条目大小的线索。
INT NOT NULL -- 4 -- meaning 4 bytes
INT NULL -- 5 -- implying an extra byte for NULL
VARCHAR(10) CHARACTER SET utf8 -- 32 -- 2 for length (might be only 1) + 3*10
但是 varchars 不占用 32 个字节;它们的长度可变。
关于mysql - 检查mysql是否有索引null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55187658/