MYSQL调优(五)之索引优化小细节

MYSQL调优(五)之索引优化小细节

  1. 模糊匹配最哈不要把百分号放到前面,这样不会用到索引了。

  2. 下面是最左匹配与范围查询联合使用注意的优化点,组合索引是nage,age,pos。第一条sql语句会匹配到age,这个时候的type只是range,因为匹配到了age;但是下一面一条sql语句用了pos,隔了个age,所以pos没有匹配到,pos是个无关条件,这个时候,type达到了ref级别,而ref为常量值。范围查找让后面的索引失效。

在这里插入图片描述

  1. 最好用覆盖索引进行查询。索引包含需要查询的字段值。

  2. order by时,最好使用索引进行排序。当SELECT * 仅选择索引列,则使用索引并避免排序。

  3. 当存储很大的空间,但是需要做索引时,可以用hash算法,比如CRC32,能压缩索引。

  4. 按照主键进行插入数据,避免页分裂与页合并。

  5. 当使用索引列进行查询的时候尽量不要使用表达式,比如id + 1 =5与 id = 4

  6. 尽量使用主键查询,而不是其他索引,因此主键查询不会触发回表查询

  7. 使用前缀索引

  8. 使用索引扫描来排序。mysql可以使用同一个索引即满足排序,又用于查找行,如果可能的话,设计索引时应该尽可能地同时满足这两种任务。Where与order by组成一个最左前缀,可以利用索引对其排序,但是如果是个范围的话,那么不行。Order by顺序与索引顺序不一样,也无法进行使用。

  9. union all,in,or都能够使用索引,但是推荐使用in。對於UNION与union all 一般用union all因为union里面会有distint去重操作。
    Union all是两个步骤。不考虑。而in 比 or运行时间短。

  10. 范围列可以用到索引,但是后面列用不到了

  11. 强制类型转换会全表扫描

  12. 更新十分频繁,数据区分度不高的字段上不宜建立索引。更新会变更B+树,更新频繁的字段建议索引会大大降低数据库性能。
    类似于性别这类区分不大的属性,建立索引是没有意义的,不能有效的过滤数据,
    一般区分度在80%以上的时候就可以建立索引,区分度可以使用 count(distinct(列名))/count(*) 来计算。

  13. 当需要进行表连接的时候,最好不要超过三张表,因为需要join的字段,数据类型必须一致。类型一样,统一进行处理,不一样则会分成几个进行join,效果性能不一样。不一样的时候,类型不匹配最好不要进行关联。A join b用id,bjoin c用name的方式,这样不行。

  14. 能使用limit的时候尽量使用limit,可以直接返回,虽然只有一个记录,但是还会做判断。限制输出,如果加了limit,那么索引的指针不会再做判断。

  15. 单表索引建议控制在5个以内

  16. 单索引字段数不允许超过5个(组合索引)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值