02-MySql什么情况加索引

概述

经过 上一章对索引的认识再谈mysql索引优化是很必要的, 索引的优化必须对B+Tree有着深刻的认识才能谈优化

什么时候加索引

  • 频繁作为where条件后面的字段
  • 需要对字段进行 group by , order by
  • DISTINCT 需要创建索引
  • 多表连接时需要创建索引, 注意, 不要超过3张因为 相当于 n 个for循环, 每多连接一次相当于加一次for循环; 多表连接是需要 类型一致(否则会自动类型转换导致索引失效) , 需要添加 where过滤条件, 否则数据量非常庞大;
  • 使用类型长度小的创建索引
  • 使用字符串前缀创建索引
  • 区分度高(散列性高)的列适合作为索引
  • 使用最频繁的列放到联合索引的左侧
  • 多个 where条件 联合索引优于单个索引, 只能使用一个索引查询B+Tree;
  • 在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建索引,根据实际文本区分度决定索引长度; 索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为 20 的索引,区分度会 高达 90% 以上 ,可以使用 count(distinct left(列名, 索引长度))/count(*)的区分度来确定。 此值越接近1 越好;

什么时候不加索引

  • 在where中使用不到的字段,不要设置索引
  • 数据量小的表最好不要使用索引 会拖慢查询速度 或者优化器直接优化掉了;
  • 有大量重复数据的列上不要建立索引, 数据重复度大,比如高于 10%的时候,也不需要对这个字段使用索引;
  • 避免对经常更新的表创建过多的索引;
  • 不建议用无序的值作为索引, 插入数据会导致索引页分裂 重新排序等;
  • 删除不再使用或者很少使用的索引;
  • 不要定义冗余或重复的索引;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值