NULL值对统计信息的影响
时间:2014-11-22
虽然都是使用B-Tree索引,但是MyISAM索引和Oracle索引的处理方式不太一样,MyISAM的索引中会记录值为NULL的列信息,只不过NULL值的索引键占用空间非常少,所以,NULL值的处理方式可能会影响到MySQL的查询优化器对执行计划的选择,于是MySQL提供了myisam_stats_method这个参数让我们可以自行决定对索引中的NULL值的处理方式.
myisam_stats_method参数的作用就是告诉MyISAM在收集统计信息的时候,是认为所有NULL值等同,还是每个NULL值是完全不相等的,所以可设置的值也为nulls_unequal和nulls_equal.
当设置myisam_stats_method=要_并转,MyISAM在搜索统计信息时会认为每个NULL值都不同,则基于这个字段索引的Cardinality就会更大,也就是说MyISAM会认为DISTINECT值数量更多,这样就会让查询优化器处理Query的时候使用这个索引的倾向性更多.
而在设置myisam_stats_method=nulls_equal之后,MyISAM搜集统计信息的时候则会认为每个NULL值都是一样的,这样Cardinality数值会降低,优化器选择执行计划的时候放弃这个索引的倾向性更高.