作用:
- 约束
- 加速查找(空间换时间)
种类:
- 普通索引:加速查找 normal
- 主键索引:加速查找、不能为空、不能重复
- 唯一索引:加速查找、不能重复 unique
- 联合索引(联合唯一):多列组合为一个索引;联合主键索引和联合唯一索引及联合普通索引
加快查找:
- 无索引:原始数据文件中顺序查找,速度慢
- 有索引:另外创建索引文件,索引文件和原始数据有一定的对应关系,查找迅速
-
- 索引种类:
- hash索引
- btree索引(多用):使用二叉树结构
- 建立索引:
- 查快,增、删、改慢
- sql语句中where后=使用索引,快;like,不真正使用索引
- create (unique) index 索引名 on 表名 (列名) (唯一)普通索引
- drop (unique)index 索引名 on 表名 删除索引
- create (unique) index 索引名 on 表名 (列名1,列名2) 联合(唯一)索引;使用时遵循最左前缀匹配
- 覆盖索引:指在索引文件中直接获取索引数据,而不用到原始数据中得到数据。
- 合并索引:条件中用到多个单列索引
- 组合所有效率 > 合并索引
- 索引种类:
频繁查找的列创建索引:创建和命中(面试中问不命中的情形)
- 数据多时,避免使用like,在项目中做搜索一般用第三方工具
- 避免使用函数如select * from user where reverse(name)='lyb';
- 类型不一致
- !=,>,or,order by
注意:
- + 避免使用select *
- + 使用count(1)或count(列)
- + 创建表时有定长的用char,并往前放
- 组合索引代替多个单列索引
- 尽量使用短索引
- 连表时条件类型一致
- + 索引散列值(重复少)不适合建立索引,如性别
执行计划:type:const、ref、system快
EXPLAIN SELECT * FROM useraccess WHERE access = '123'
慢日志:
C:ProgramDataMySQLMySQL Server 5.7my.ini中# General and Slow logging.