什么是索引?
- 索引是在数据库表的字段上添加的,是为了提高查询效率而存在的一种机制。
- 一张表的一个字段可以添加一个索引,多个字段联合起来也可以添加索引。
- 索引相当于一本书的目录,是为了缩小扫描范围而存在的一种机制
- MySQL查询方式: 全表扫描、根据索引检索
如果数据库表中的字段没有添加索引时,MySQL会进行全表扫描,这样效率就比较低,相反添加索引后,扫描范围就缩小了,效率也相对应的提高
索引的实现原理
- 在如何数据库当中主键上都会自动添加索引对象,在MySQL中,一个字段上如果有unique(唯一)约束,也会自动创建索引对象。
什么时候需要添加索引?
索引的创建和删除
-
索引创建
-
索引删除
查看当前索引是否使用了索引进行检索
- type为ALL,代表使用的全表查询
- sql语句
EXPLAIN SELECT * FROM users WHERE username = ‘user’
- type为ref 代表使用索引检索,且与全表查询相比,本次只查询了一次就查询到了
索引的失效
- 避免在where子句中对字段进行null值判断,会导致引擎放弃索引查询,而使用全表查询
- 尽量不要使用 select * ,用具体的字段代替
- 尽量避免在where子句使用or连接条件,可以使用union all
- 尽量避免在where子句使用in not in,会导致全表查询
- 避免在模糊查询时,在具体的值前面添加%,也会导致全表查询
- 不要在where子句中 =的左边进行函数及算术运算