Mysql索引总结

一、索引概念

索引(Index)是帮助MySQL高效获取数据的数据结构,可以得到索引的本质:索引是数据结构

可以理解为“排好序的快速查找数据结构”

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

二、索引的优缺点

1.  优点

   (1)类似大学图书馆建书目索引,提高数据检索效率,降低数据库的IO成本;

    (2)通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

2.  缺点

    (1)实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占空间的。

    (2)虽然索引大大提高了查询速度,同时确会降低更新表的速度,如对表进行INSERT、UPDATE、DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。 

三、索引类别

1.  主键索引(PRIMARY)

2.  唯一索引(UNIQUE)

3.  普通索引(INDEX)

4.  组合索引

5.  全文索引(FULLTEXT)

注意:MySQL5.6以下只有 MYISAM引擎的表字段可以设置全文索引, MySQL5.6以上的INNODB引擎表才可以设置全文索引。但MYSQL5.7以下的版本都只能全文检索英文,5.7版本以上才能全文检索中文。(可参考:Mysql建立中英文全文索引)。

索引类别的详细说明+索引的创建/修改/删除,参考:MySQL索引类型

四、索引结构

1.  BTree索引
2.  Hash索引
3.  full-text全文索引

4.  R-Tree索引

五、哪些情况需要建立索引

1.  主键自动建立唯一索引;

2.  频繁作为查询条件的字段需要建立索引;

3.  查询中与其他表关联的字段,外键关系需要建立索引;

4.  查询中进行排序的字段应该建立索引,提高排序速度;

5.  查询中分组或统计的字段应该建立索引;

6.  在搞并发的情况需要建立组合索引。

六、哪些情况不需要建立索引

1.  频繁更新的字段不适合建立索引;

2.  where条件里用不到的字段不建立索引;

3.  表记录内容很少的情况下不建立索引;

4.  经常增删改的表内字段不建立索引;

5.  如果某个数据列包含许多重复的内容,为它建立索引也就没有太大的实际效果。

七、索引使用相关规则

  1.   字段类型转换导致不能用索引。如字符串类型的不用引号,数字类型的用引号等,这有可能会用不到索引导致全表扫描;

  2.   mysql 不支持函数转换,所以字段前面不能加函数,否则这将用不到索引;

  3.   不要在字段前面加减运算;

  4.   字符串比较长的可以考虑索引一部份减少索引文件大小,提高写入效率;

  5.   使用like时,“%关键词%” 用不到索引,只有“关键词%”才能用索引,关键词前面不能加%;

  6.   根据联合索引的第二个及以后的字段单独查询用不到索引;

  7.   不要使用 select *;

  8.   排序请尽量使用升序 ;

  9.   or 的查询尽量用 union 代替 (Innodb);

  10.   复合索引高选择性的字段排在前面;

  11.   order by / group by 字段包括在索引当中减少排序,效率会更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值