MySQL索引优化小记
有2种数据类型,一种重复率高、一种重复率低,选择这2种类型哪个建立索引好?为什么?
之前确实没考虑过这个问题,但觉得既然是使用空间换时间,数据结构本身重复率那么高索引的作用应该就不大了吧。
后来结束到家查看资料后,发现这个名词叫做"离散率”。对于DBA这个问题应该是最最基础的了。
建立索引的几个原则:
- 在
where
、group by
、on
语句中出现的列。 - 最左前缀匹配。
- 离散度大的放到联合索引前面,比如a的离散度高于b,则使用index(a,b)。
- 索引列不参与计算。
- 索引字段越小越好。
- 尽量扩展索引而不是新建索引。(存疑)
索引的缺点:
- 额外占用磁盘,降低写操作性能。
- 修改表内容时候,索引需要更新。