sql优化-索引介绍

来源:互联网 发布:正版bim软件多少钱 编辑:程序博客网 时间:2024/06/06 13:12

索引分类:

B-tree索引:最常见的索引类型,大部分储存引擎都支持它;

HASH索引:只有Memory引擎支持它,使用场景简单;

R-Tre索引:空间索引,使用较少;

Full-text索引:全文索引,mysql5.6版本之前只有MyISAM支持,但是5.6之后InnoDB也开始支持它;

使用场景分析:

(1).匹配全值,简单来说就是对一个数据库做全表搜索,但是指定了几个字段,那几个字段就应该建立索引,但是注意设置的时候不应该允许null值,否则会失效;

(2).某个值的范围查找,如果你对一个字段进行范围查找,使用索引会快很多倍;

(3).多个where条件的时候,假设你的where条件是多个条件组成,如果你只是在where条件的其中后面几个条件作了索引,但是第一个条件没做,这样就会失去索引的作用,从而做全表扫描;但是你要是前面几个条件都做了索引,后面的条件没做,这样索引也能实现,但是效率不是很高,只有多你的where条件的所有字段做索引才会效率最高,所以经常作为where条件的字段一定要做索引,但是不是说索引越多越好,因为索引也会消耗磁盘空间,同时,索引也需要时间解析,有时候索引太多反而会适得其反,主要还是看自己的业务操作而定;

(4).匹配列前缀,简单来说就是你做where name like 'zhangsan%';这种操作的时候我们应该在这个字段建立索引,但是如果你是全局匹配的话,索引也会失去效果,从而做全文索引;

(5).where条件中一部分条件是精确查找,其他的访问查找,这种范围字段也应该使用索引;

几种不适用索引的场景:

(1),以%开头的LIKE查询不会使用到B-Tree索引,但是可以使用全文索引代替;

(2).数据类型出现隐式转换的时候不会使用到索引,特别是当列的类型为字符串,那么一定要把字符串用引号引起来,否则索引无效,

(3).where条件中最左面的条件没有使用索引,那么所有的字段都不会使用索引,因为这个违背了最左原则;

(4).如果你做一个条件查找,查找出来的数据比较多,就不会使用索引,因为这样使用索引还没有不使用索引快;

(5).如果用到or条件分割,or条件前面的列有索引,而后面没有索引,那么这个涉及的索引就不会被用到;



1 0