MySQL数据库索引详解

MySQL数据库索引详解

  • 1. 什么是索引
  • 2. 为什么用索引
  • 3. 有哪些索引
  • 4. 索引怎么用

1. 什么是索引

聊聊索引,主要三个问题,是什么,为什么,怎么用。

首先是什么是索引?
索引就是排好序的快速查找数据结构。

2. 为什么用索引

优势:
1.提高数据检索的效率, 降低数据库的IO成本。
2.通过索引列对数据进行排序, 降低数据排序的成本, 降低了CPU的消耗。

劣势:
1.虽然索引大大提高了查询速度, 同时却会降低更新表的速度, 如对表进行INSERT、 UPDATE和DELETE。 因为更新表时, MySQL不仅要保存数据, 还要保存一下索引文件每次更新添加了索引列的字段, 都会调整因为更新所带来的键值变化后的索引信息。
2.实际上索引也是一张表, 该表保存了主键与索引字段, 并指向实体表的记录, 所以索引列也是要占用空间的。

3. 有哪些索引

MySQL 使用的是 Btree 索引。另外还有B+tree 索引,B-tree 索引,具体原理不在细说,原理详情参考官网。
简单说下以下几个常用索引。
1.单值索引
概念:即一个索引只包含单个列, 一个表可以有多个单列索引

2.唯一索引
概念: 索引列的值必须唯一, 但允许有空值

3.主键索引
概念: 设定为主键后数据库会自动建立索引, innodb为聚簇索引。

4.复合索引
概念: 即一个索引包含多个列

4. 索引怎么用

适合创建索引的情况
 主键自动建立唯一索引;
 频繁作为查询条件的字段应该创建索引
 查询中与其它表关联的字段, 外键关系建立索引
 单键/组合索引的选择问题, 组合索引性价比更高
 查询中排序的字段, 排序字段若通过索引去访问将大大提高排序速度
 查询中统计或者分组字段

不适合创建索引的情况
 表记录太少
 经常增删改的表或者字段
 Where 条件里用不到的字段不创建索引
 过滤性不好的不适合建索引

你可能感兴趣的