MySQL索引设计一些策略
Posted 我爱默小兜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL索引设计一些策略相关的知识,希望对你有一定的参考价值。
前言
索引加快了检索的速度,但是却降低了数据列里插入、删除以及修改数值的速度。也就是说,索引降低了许多涉及写入的操作速度。之所以出现这种情况,是由于写入一条数据不仅仅是要写入到数据行,还需要所有的索引都作出相应的改变如更新或是重新编排。mysql在为检索生成一个执行方案时候,要仔细对索引进行计算,创建过多的索引对查询优化程序就加上了更多的工作,而且当你有太多的索引的时候,MySQL还有可能无法选出最好的索引来使用。于是在选择索引的时候,需要采取一些策略。
策略1
在选择索引列的时候,尽量为用搜索、分类或者分组的数据列编制索引,不要为作为输出的数据列编制索引。换句话说,最合适有索引的数据列是那些在where字句中出现的数据列,在连接字句中给出的数据列、或是在order by或是group by子句中出现的数据列。
策略2
综合考虑数据列的维度势。数据列的维度,等于它所容纳的非重复值的个数。
策略3
尽量选择短小的值进行索引
短小的值可以让比较操作更快完成,加快索引查询速度。
短小的值可以让索引的体积更小,减少磁盘I/O活动
短小的键值意味着键缓存里的索引块可以容纳更多的键值,让MySQL可以在内存中容纳更多的键,这样较少了I/O活动的概率。
InnoDB存储引擎采用的聚族索引。所谓的聚族索引就是把数据行和主键索引集中保存在一起,其他的索引都是二级索引,它们保存着主键值和二级索引值。对于二级索引查找过程是先通过二级索引找到主键,然后通过主键找到对应的数据。选择短小的值进行索引,可以减少二级索引占据的空间。
策略4
为字符串值的前缀添加索引
如果打算给一个字符串列添加索引,尽可能的给出前缀长度。
策略5
不要建立过多的索引
以上是关于MySQL索引设计一些策略的主要内容,如果未能解决你的问题,请参考以下文章