目录
1.使用索引
1.1自动创建索引
- 当我们为一张表加主键约束(Primary Key),外键约束(Foreign Key),唯一约束(Unique)时,MYSQL会为对应的列自动创建一个索引
- 如果表不指定任何约束时,MYSQL会自动为每一列生成一个索引并用ROW_ID进行标识
1.2手动创建
1.2.1 主键索引
1.2.2 唯一索引
1.2.3 普通索引
1.2.4 创建复合索引
1.2.5 查看索引
方式一:show keys from 表名
1.3 删除索引
1.3.1 主键索引
1.3.2 其他索引
1.4 关于索引的注意事项(也就相当于索引的优化)
- 索引创建在高频查询的列上
- 索引需要占用额外的存储空间
- 对表进行插入、更新和删除操作时,同时也会修改索引,可能影响性能
- 创建过多或者不合理的索引会导致性能下降,需要谨慎选择和规划索引
2.怎么查看有无走索引
2.1.先为学生表创建一个索引
2.1.1 创建学生表
2.1.2 查看学生表中的主键信息
2.1.3 创建复合索引
创建方法: create index index_student_sn_name on student(sn,name);
2.3.4 查看是否使用索引
explain +语句
1.不加条件使用所有
2.使用主键查询
3.子查询中使用索引
其中type的访问类型:
从左至右,性能由好到差
1.All:扫描全表
2.index:扫描全部索引
3.range:扫描部分索引,索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、< 、> 等的查询
4.ref:使用非唯一索引或非唯一索引前缀进行查找,不是主键或不是唯一索引
5.eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描
6.const,system:单表中最多右一个匹配行,查询起来非常迅速,例如根据主键或唯一索引查询。system是const类型的特例,当查询的表只有的情况下,使用system。
7.NULL:不访问表或者索引,直接就能得到结果,如:
3.实际应用练习
1.使用普通索引
2.使用复合索引