【数据库】索引优化策略

版权声明:转载请注明 https://blog.csdn.net/qq_33591903/article/details/83589388

                                             索引优化策略

关于什么是索引,如何建立索引,索引的优缺点等,请移步我的另外一篇文章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' ;

猜你喜欢

转载自blog.csdn.net/qq_33591903/article/details/83589388