mysql索引优化:唯一性太低的字段

除非特殊情况,否则不要在唯一性太低的字段上面添加索引。

 

什么叫唯一性太低?

主要是一些表示状态或者类型的字段,例如:性别、是否删除等。

 

为何?

mysql在查询时,会将索引中的键值取出来与内存中页的数据相比较。

但是内存页中数据的顺序与索引中数据的顺序并不是一致的。

假如索引值为“1”,在数据页“a”中找到了数据,然后又在数据页“b”中找到了数据,“b”不在内存中。

此时mysql把“a”销毁,把“b”读到内存中。

接下来,mysql又在数据页“a”中找到了数据,此时又必须反过来把“b”销毁,把“a”读到内存中。

由于从索引去寻找表中数据是随机访问的,这种随机访问所造成的频繁的io操作,甚至比全表扫描的io消耗要大。

 

特殊情况

什么叫特殊情况呢,就是你可以 完全确定 索引的数据是连续的,同一个索引值的数据在同一个或者连续的数据页中不会有例外。此时使用索引 有可能 会提高查询效率。

posted @ 2022-09-22 09:07  Bin_x  阅读(99)  评论(0)    收藏  举报