linux学习笔记(38)mysql索引详解
索引详解
索引是什么
索引是一种特殊的文件,它包含着对数据表里所有记录的引用指针。简单讲,就像一本书前面的目录,能加快查询速度。
- 索引是帮助mysql高效获取数据的数据结构
- 索引存储在文件系统中
- 索引的文件存储形式与存储引擎有关
- 索引文件的结构
索引为什么选择b+树
可以考虑作为索引的数据结构有如下几种,下面介绍下不同数据结构的特点:
- hash表
- 二叉树
- b树
- b+树
使用hash表的缺点:
1)hash存储需要将所有的数据文件添加到内存,浪费空间
2)如果是等值查询,hash很快,但实际工作中范围查找更多,而不是等值查询,所以hash就不合适了
1. 索引的创建和使用
-- 创建普通索引CREATE INDEX idx_student_name ON students(name);-- 创建唯一索引CREATE UNIQUE INDEX idx_student_email ON students(email);-- 创建复合索引CREATE INDEX idx_student_class_score ON students(class_id, score);-- 查看索引SHOW INDEX FROM students;-- 删除索引DROP INDEX idx_student_name ON students;
2. 索引性能测试
-- 开启性能分析SET PROFILING = 1;-- 无索引查询SELECT * FROM students WHERE name = '张三';-- 创建索引后查询CREATE INDEX idx_name ON students(name);
SELECT * FROM students WHERE name = '张三';-- 查看查询时间SHOW PROFILES;
索引的核心思想:
- 索引像书的目录 - 快速定位,避免全表扫描
- B+树结构 - 多层查找,效率极高
- 用EXPLAIN分析 - 查看索引是否生效
- 复合索引注意顺序 - (A,B)索引能查A,不能只查B
- 索引有代价 - 占用空间,降低写性能
黄金法则:只为经常查询、数据区分度高的字段创建索引!