为了账号安全,请及时绑定邮箱和手机立即绑定

高性能索引策略二

标签:
Oracle

多列索引

一个误区:一个常见的错误就是,为每个列创建独立的索引,或者按照错误的顺序创建多了索引。

1. 为什么要建立多了索引

  在每个列创建独立索引一般是由于听到诸如“吧where条件里面的列都建立上索引”这样模糊的建议导致的,实际上这个建议的非常错误的,在多个列上简历独立的单列索引大部分情况下并不能提高mysql的查询性能。

  索引合并策略:

  mysql5.0和更新版本引入了一种叫“做阴合并”的策略,一定程度上可以使用表上的多个单列索引来定位指定的行,更早版本的mysql只能使用其中某一个单列索引,然而这种情况下没有哪一个独立的单列索引是非常有有效的,例如在file_id和actor_id上各有一个单列索引。但对于下面的这个查询where条件,这俩个单列索引都不试最好的选择;

  mysql>SELECT file_id,actor_id FORM file_actor WHERE file_id = 1 OR actor_id = 1;

  在老的mysql版本中,mysql会对这个查询使用权标扫描,但在mysql5.0和更新版本中,查询能够同时使用这俩个单列索引进行扫描,并将结果合并,这种算法有三个变种:OR条件的联合(union),AND条件的相交(intersection),组合前俩种情况下的联合和相交。

  什么时候使用多了索引

  当服务器对多个索引做相交操作时(通常有多个AND条件)

  当服务器对多个索引做联合操作时(通常有多个OR条件)

 

2.选择合适的索引列顺序

  在一个B-Tree索引中,索引列的顺序意味着索引首先按照最左列进行排序(最左原则),其次是第二列,等等。(顺便说明本篇文章内容使用于B-Tree索引,哈希索引或者其他类型索引并不会想B-Tree索引一样按照顺序存储数据)

  对于如何选择索引列顺序有一个检验法则:将选择性最高的列放在做索引的最前列。

作者:长毛的茄子

原文链接:https://www.cnblogs.com/skl-bobo/p/10418832.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消