索引就好比我们看一本书,再要查找某些内容,一页挨着一页找的话需要查找整本书,但是如果有目录的话我们就能缩小范围,在指定范围内查找这样查找效率会比较高,mysql中的索引就好比一本书的目录。
索引是在数据库表的字段上添加的,是为了提高查询效率
存在的一种机制,可以为表的一个字段,多个字段,多个字段联合起来添加索引。
索引查找原理
- 在任何数据库中主键上都会自动添加索引对象,id字段上自动又索引,因为id是pk。如果字段上又
unique约束
也会自动创建索引对象。 - 在数据库中的表上的每一条记录在硬盘上都会有唯一的物理存储编号。
- 索引查找是根据二叉树的方式来找,所以快啊。 ```sql — 数据
id(pk) name 物理存储编号
100 zhangsan 0x1111 120 lisi 0x2222 99 wangwu 0x3333 88 zhaoliu 0x4444 101 fengqi 0x5555 55 wangba 0x6666 130 sunliu 0x7777 ``` 如下搜索idIndex为101;
- SELECT * FROM t_use WHERE id = 101;
- mysql匹配id字段上的索引对象,通过idIndex进行查找
- 通过idIndex索引通过二叉树定位到101
- 通过101获取对应的无力存储编号 (SELECT * FROM t_use WHERE 物理存储编号 = 0x5555;)
- 返回对应的数据
什么情况下使用索引?
- 数据量庞大
- 该字段经常出现在WHERE后面,以条件的形式存在,也就是说这个字段总是被扫描
- 该字段很少MDL(insert update delete)操作,(因为DML之后需要重新排序)
建议不要随意添加索引,因为索引也需要维护,太多索引会降低系统的性能。
建议通过主键查询,unique约束的字段进行查询,这样效率较高。