CREATE TABLE `example_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name_index` (`name`), KEY `age_index` (`age`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
上述示例代码创建了一张名为example_table的表,包含三个字段:id、name和age。其中,id为主键,并自动增量生成;name为非空字符串类型,且建立了索引;age为可空的整数类型,并同样建立了索引。由于age字段可以为空,因此大家需要考虑建立索引的合理性。
首先,值得注意的是,建立索引的目的是为了加速查询,但是如果将包含大量null值的列作为索引,会影响查询性能,并且会浪费硬盘空间。这是因为索引是基于字段值构建的,而null值无法参与比较,因此对索引没有任何作用。
其次,如果查询条件含有对null值列的限制,那么建立索引可以提高查询效率。在上述示例代码中,age字段建立了索引,因此当大家查询age=null的数据时,MySQL可以直接利用该索引找到匹配的记录。但是需要注意的是,建立索引的代价远高于查询的代价,因此需要根据具体情况进行权衡。
综上所述,对于包含null值的列,是否建立索引需要根据具体情况进行考虑,只有在满足查询条件时才需要建立索引。