这里写目录标题
- 一、什么是索引
- 1. 一个可能的索引方式示意图
- 2. 优势
- 3. 劣势
- 二、索引分类和用法
- 1. mysql索引分类
- 2. 基本语法
- 3. mysql索引结构
- 4. 哪些情况需要创建索引
- 5. 哪些情况不需要创建索引
一、什么是索引
- 排好序的快速查找的数据结构。
- 索引(Index) 是帮助MySQL高效获取数据的数据结构,本质是数据结构。
- 索引的目的在于提高查找效率。
- 一般来说索引本身所在内存也比较大,索引往往以索引文件的形式存储在磁盘上。
- 常见索引一般是BTREE(多路搜索树)结构组织的索引。
1. 一个可能的索引方式示意图
2. 优势
- 建立(书目索引)检索索引提高数据的检索效率,降低数据库的IO成本。
- 通过索引对数据进行排序,降低数据排序的成本,降低了cpu的消耗。
3. 劣势
- 索引也是要占用空间的
- 降低更新表的速度
- 需要需找最优索引,并且随着表结构的变化索引也要发生改变
二、索引分类和用法
1. mysql索引分类
○ 单值索引,一个索引只包含单个列,一个表可以有多个单值索引
○ 唯一索引,索引列的值必须唯一,但允许为空值
○ 复合索引,一个索引包含多个列
2. 基本语法
创建; CREATE [UNIQUE] INDEX 索引名 ON 表名(列名);
ALTER 表名 ADD [UNIQUE] INDEX [索引名] ON (列名);
删除:
DROP INDEX [索引名] ON 表名;
查看:
SHOW INDEX FROM 表名;
3. mysql索引结构
- BTree 索引
- Hash 索引
- Full-text 索引
- R-Tree 索引
4. 哪些情况需要创建索引
○ 主键自动建立唯一索引
○ 频繁作为查询条件的字段应该建立索引
○ 查询中与其他表关联的字段,外键关系建立索引
○ 频繁更新的字段不适合创建索引
○ Where 条件里用不到的字段不创建索引
○ 单值/组合索引的选择(高并发在创建组合索引)
○ 查询中排序的字段创建索引,提高排序速度
○ 查询中统计或者分组的字段
5. 哪些情况不需要创建索引
○ 表记录太少 (少于300万)
○ 经常增删改的表
○ 数据重复且分布平均的表字段