索引设计原则

设计索引时,一般要考虑哪些因素(索引设计原则)

1、根据查询语句来设计,使其都能用上索引:最好是让你的各个where、order by、group by后面跟的字段都是联合索引的最左侧开始的部分字段,这样它们都能用上索引。

2、字段基数问题:尽量使用那些基数比较大的字段,就是值比较多的字段,那么才能发挥出B+树快速二分查找的优势来;

这一点不是绝对的,可以把基数较低但是频繁查询(几乎每次查询都会指定)的省份、城市、性别放到联合索引的最左侧去。

3、前缀索引问题:尽量使用那些字段类型比较小的列,比如tinyint之类的,此时你再搜索的时候性能也会比较好一点。

这一点不是绝对的,万一真要把那种varchar(255)的字段作为索引,你可以仅仅针对前20个字符建立索引,此时建立出来的索引类似于KEY my_idnex(name(20), age, cource),
如果你是where条件里是根据name字段来搜索,那么此时就会先到索引树里根据name字段的前20个字符去搜索,定位到后,再回到聚簇索引提取出来完整的name字段值进行比对就可以了;
如果你是order by name,此时你的name因为在索引树里仅包含了前20个字符,所以排序是没法用上索引了,同理group by。

索引字段的基数:对于那种字段基数很低的列尽量别包含到索引里去,没多大用;
前缀索引:对于那种比较长的字符串类型的列,可以设计前缀索引,仅仅包含部分字符到索引树里去,where查询还是可以用的,但是order by和group by就用不上了。

4、索引列套函数问题:尽量不要在查询语句的索引字段上套个函数

5、索引别太多,建议两三个联合索引就应该覆盖掉你这个表的全部查询了。

否则索引太多必然导致你增删改数据时性能很差,因为要更新多个索引树。

6、建议主机一定是自增的,别用UUID之类的。

因为主键自增,那么起码你的聚簇索引不会频繁的页分裂,主键值都是有序的,就会自然的新增一个页而已,但是如果是UUID,会导致聚簇索引频繁的页分裂。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温酒往事·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值