如果判断是否需要创建索引

1、较频繁的作为查询条件的字段应该创建索引.

2、唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件:

唯一性太差的字段:如状态字段,类型字段等。这些字段即使创建了单独的索引,MySQL Query Optimizer大多数也不会选择使用,如果什么时候

     选择了这种索引,可能会带来极大的性能问题。由于索引字段中每个值都含有大量的记录,那么存储引擎在根据索引访问数据的时候会带来大量的随机IO,甚至有时候可能还好出现大量的重复IO

       3、更新非常频繁的字段不适合创建索引:

     跟新字段数据,同时还要更新索引的数据,以确保索引信息是准确的,这会增加IO访问量较大的增加,不仅仅影响更新query的响应时间,还会影响真个存储系统的资源消耗,加大存储系统的负责。


单一索引还是复合索引

对于多个where条件的数据,组合索引会比单一索引的查询效率要高,因为通过单一索引所能过滤的数据并不完整,和通过组合索引相比,存储引擎需要访问更多的记录。

但是组合索引在多个字段中存在,更新的频率会带来一定性能消耗。

       对于建立多个单键索引,MYSQL Query  Optimizer大多数时候只会选择一个单键值的索引,然后放弃其他索引。即使他选择了同时利用两个或者更多的索引通过INDEX_MERGE来优化查询,可能所收到的效果并不会比选择其中某一个单键值索引高效。

因为如果选择了INDEX_MERGE来优化查询,就需要访问多个索引,同时还要将通过访问到的几个索引进行merge操作,所带来的成本可能反而会比选择其中一个最有效的索引来完成查询更高。

在创建组合索引并不是说将查询条件中所有字段放在一个索引中,我们还应该尽量让一个索引被多个query语句使用,尽量减少同一个表上面索引的数量,减少因为数据更新所带来的索引更新成本。同时还可以减少因为索引所带来的存储空间的消耗。


大多数场景下比较适合:

1、对于单键索引,尽量选择针对当前query过滤性更好的索引;

2、在选择组合索引的时候,当前query中过滤性最好的字段在索引字段顺序中排列越靠前越好;

3、在选择组合索引的时候,尽量选择可以能够包含当前query的where子句中更多字段索引;

4、尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的而减少通过使用Hint人为控制索引的选择,因为这会是后期的维护成本增加,同时增加维护所带来的潜在风险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值