MySql索引
- 索引的定义
- 索引是数据库管理系统中一个满足特定查找算法(排序)的数据结构,这些数据结构以某种方式引用(指向)数据,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树,以索引文件的形式存储在磁盘上,索引页中包含着索引键值和它所指向该行记录在数据页中的物理位置,叫做行定位符
- 索引优缺点
-
-
优势:
- 类似于书籍的目录索引,提高数据的检索效率,减低数据的IO压力
- 通过索引对数据进行排序,减低数据排序的成本,降低CPU的消耗
劣势:
- 索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所有索引列也是要占用空间的
- 创建索引和维护索引要耗费时间,具体地,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率
-
- 什么场景使用索引
- 对查询频次较高,且数据量比较大的表建立索引,
- 最左前缀匹配原则,组合索引非常重要的原则
- 利用最左前缀,N个列组合而成的组合索引,那么相当于是创建N个索引,如果where子句中使用了该索引的前几个字段,那么这条查询sql可以利用组合索引来提升效率
- 更新频繁字段不适合创建索引,索引可以有效提升查询数据的效率,但索引数量不是越多越好,索引越多,维护索引的代价就越大,对于insert,update,delete操作较多的表来说,索引过多,会引入相当高的维护代价,减低DML操作的效率,另外索引过多,Mysql选择索引时也会影响效率
- 使用短索引,索引创建之后也是使用硬盘来存储的,短索引可以在特定大小的空间内存储更多的索引值,相应的可以提升Mysql访问索引的I/O效率,也可以提升整体的访问效率
- 尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可
- 定义有外键的数据列一定要建立索引,如果外键列上缺少索引,从主表(即被外键引用的那个表)关联子表(即建立外键所在的那个表)的查询就只能对子表选择全表扫描的查询
- 索引失效的情况
- 如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
- 对于多列索引,不是使用的第一部分,则不会使用索引
- like查询以%开头,不一定会失效,可以使用覆盖索引
- 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

浙公网安备 33010602011771号