Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的B+树上是否存储空值_Mysql_Indexing_Innodb - Fatal编程技术网

MySQL中的B+树上是否存储空值

MySQL中的B+树上是否存储空值,mysql,indexing,innodb,Mysql,Indexing,Innodb,mysql 5.7 innodb 解释从a为空的测试中选择 a可以为空,a为正常索引 我们可以看到: 额外信息:使用where;使用指数; 这意味着索引存储空值 在分析索引时,将NULL视为另一个值 您的特定选择没有多大作用。它将进行索引扫描,因为所有只需要a的列都在索引inx_a中,而您显然拥有索引inx_a。也就是说,指数正在覆盖。它不需要对所有“行”进行完整的索引扫描 是空值将首先出现在索引中;它应该执行索引扫描,例如: 在开始时深入索引的B树。 读取“rows”,直到它遇到除NULL以外

mysql 5.7 innodb

解释从a为空的测试中选择

a可以为空,a为正常索引 我们可以看到: 额外信息:使用where;使用指数; 这意味着索引存储空值


在分析索引时,将NULL视为另一个值

您的特定选择没有多大作用。它将进行索引扫描,因为所有只需要a的列都在索引inx_a中,而您显然拥有索引inx_a。也就是说,指数正在覆盖。它不需要对所有“行”进行完整的索引扫描

是空值将首先出现在索引中;它应该执行索引扫描,例如:

在开始时深入索引的B树。 读取“rows”,直到它遇到除NULL以外的内容;交付a。 在某些情况下,优化器会避开一个明显的索引,而只是进行一次表扫描,但这里的情况似乎并非如此。例如,由于大多数行都有一个IS NULL,因此下面很可能会忽略索引并执行表扫描:

SELECT a,b FROM t WHERE a IS NULL
OTOH,INDEXa,b将是一个覆盖索引,它应该在索引中进行范围扫描


如果您希望进一步讨论此问题,请提供“显示创建表”作为文本而不是图像。

是,NULL是表示“无值”的某些变体的值。因此,它必须存储在某个地方。根据列类型和相关索引,这是存储非空值的相同位置。当然,我做了一个测试。表中的a列有90%的空值,它也使用索引而不是扫描整个表。若索引不存储空值,那个么扫描整个表可能是一个很好的解决方案。我是对的吗?我是错的。解释从a为空的测试中选择一个;额外信息:使用where;使用指数;指示需要通过where条件以及索引返回表的查询数。如果索引存储空值。为什么返回表查询??它可以证明索引不存储空值???您好,我的sql,我也认为索引是覆盖的,但解释信息:使用where;使用索引,而不是使用索引,这意味着索引是否不包含null?使用索引意味着覆盖索引,这意味着SELECT中的所有列都可以在一个索引中找到。