【数据库】索引优化策略

      关于什么是索引,如何建立索引,索引的优缺点等,请移步我的另外一篇文章mysql索引简谈

一、为什么要建立索引?

      一句话,为了加快查询效率。注意这里的“查询”,而不是增删改。建立索引的列,一旦发生了增加、更新或删除操作,索引是需要维护的,此外不宜建立大量的索引,索引也占用磁盘空间。建立索引,应该权衡(查询)与(磁盘占用、维护索引)两者的代价,从而使整个数据库的性能最优。

二、哪里可以建立索引?

【1】数据库以查询为主,那么在经常查询的列上建立索引。

【2】在需要进行join的字段上建立索引,哪些被join起来的字段,也应该是相同的类型。

【3】对多个列可以建立联合索引,不过在查询的时候,查询语句需要满足最左前缀原则。

【4】可以在主键、外键上建立索引,可以确保主键的唯一性。

【5】数据长度比较小的列上,可以建立索引,一来索引文件比较小,二来内存中可以装载更多的索引键。

【6】如果一个列是比较长的字符串,为了加快这种长列的查询速度,可以为其建立前缀索引。

三、哪里应该避免建立索引?

【1】以增删改为主的数据库,应该避免建立过多的索引。

【2】区分度比较小的列,或者是查询基本用不到的列,应该避免建立索引。

【3】表的记录太少的话,避免建立索引,此时建立索引与不建立索引的效果一致,而此时还要建立索引的话,会占用额外的空间。

四、哪些sql语句不走索引?

【1】select * from book 当语句中没有where子句时,那肯定是不走索引的。

【2】select * from book where name(书名,varchar类型) like '%中',不走索引,只要%出现在第一个位置,那么就不走索引。

【3】select name from book where sell_num(销量,数值类型) > 100,数值类型进行不等操作时,不走索引。

【4】select name from book where sell_num/2=100,对销量进行表达式操作或者是函数操作的,不走索引。

可以将sql语句改为 select name from book where sell_num=200

【5】select name from book where author(作者,varchar类型)=‘tom’ or author='jack',使用or进行连接的,也不走索引,应改为select name from book where author='tom' union all select name from book where author='jack'

【6】select name from book where translator(译者,varchar类型) is null,即进行null值判断,不走索引,可以在插入书籍信息的时候,译者为null的话就存入0,之后使用select name from book where translator='0'来查询译者为null的书籍名。

【7】select name from book where version(版本,varchar类型)=1.0,即需要进行隐式类型转换的,这里是从varchar类型转化为浮点类型,不会走索引,将1.0改为‘1.0’,则走索引。

【7】在组合索引中的查询不满足最左前缀原则时,查询不走索引。如果我们对book表建立联合索引(a,b,c),那么以下的语句是走索引的

select * from book where a='x' ;

select * from book where a='x' and b='y' ;

select * from book where a='x' and c='z ;

select * from book where a='x' and b='y and c='z' ;

而以下语句不走索引

select * from book where b='y' ;

select * from book where c='z' ;

select * from book where b='y' and c='z' ;

文章原链接:https://blog.csdn.net/qq_33591903/article/details/83589388

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值