检查mysql是否索引为空

时间:2019-03-15 17:12:38

标签: mysql query-optimization

基于this question,我相信mysql确实的确索引了空值。 我正在尝试优化一个sql服务器,我想知道该服务器是否具有索引空值;有没有办法检查索引的NULL值?

3 个答案:

答案 0 :(得分:1)

忽略,忽略,忽略!

索引是否包含0个字节,1个字节,2个字节或NULL的几个字节-这在事物的总体方案中微不足道。

BTree(您正在谈论的是BTree索引)可向下钻取很少的级别(对于 billion 行,可能为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个字节;它们是可变长度。

答案 1 :(得分:0)

如果索引所指向的表列具有空值,则表示该索引也将包含在索引中。

答案 2 :(得分:0)

据我所知,您无法在索引本身中查询空值,但始终可以使用where column_name IS NULL条件来检查一列中是否为空值,然后从那里开始。