目录
1、什么是索引
数据库索引是⼀种数据结构,⽤于提⾼数据库表的查询效率。
索引可以帮助数据库快速定位和检索存储在表中的数据,从⽽加快数据查询的速度。在数据量⽐较⼤时,使⽤索引可以极⼤地提⾼数据检索的效率。形象的说就是索引是数据的目录。
索引的作⽤是通过构建⼀个额外的数据结构(B-tree、哈希表等)来加速数据的检索。它是在数据库表上创建的⼀种数据结构,它包含⼀些指向表中数据的指针,可以快速地定位到满⾜查询条件的数据⾏,从⽽提⾼查询效率。索引可以包含⼀个或多个列,可以使⽤单列索引、组合索引、全⽂索引等多种⽅式来创建。
2、索引的使用场景
适合使用索引的场景
- 字段有唯一性限制的
- 频繁查询的列,如主键、外键等。
- 经常作为查询条件的列,如 WHERE、ORDER BY、GROUP BY 等语句中的列。
- 经常需要连接的列,如多表联合查询时的列。
- 数据量较大的表,通过索引可以加快数据检索速度。
什么时候不适合创建索引
- WHERE 条件,GROUP BY,ORDER BY ⾥⽤不到的字段,索引的价值是快速定位,如果起不到定位的字段 通常是不需要创建索引的,因为索引是会占⽤物理空间的
- 字段中存在⼤量重复数据,不需要创建索引,⽐如性别字段,只有男⼥,如果数据库表中,男⼥的记录分布均匀,那么⽆论搜索哪个值都可能得到⼀半的数据。在这些情况下,还不如不要索引,因为 MySQL 还有⼀个查询优化器,查询优化器发现某个值出现在表的数据⾏中的百分⽐很⾼的时候,它⼀般会忽略索引,进⾏全表扫描
- 表数据太少的时候,不需要创建索引
- 经常更新的字段不⽤创建索引,⽐如不要对电商项⽬的⽤户余额建⽴索引,因为索引字段频繁修改,由于要维 护 B+Tree的有序性,那么就需要频繁的重建索引,这个过程是会影响数据库性能的。
3、索引的优缺点
优点:
- 提⾼数据库的查询速度
- 缩短数据检索的时间
- 提⾼系统的性能
缺点:
- 需要占用物理空间,数量越大,占用空间越大
- 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增大
- 会降低表的增删改的效率,因为每次增删改索引,B+ 树为了维护索引有序性,都需要进行动态维护
因此,需要根据实际情况进⾏索引的创建和使⽤,避免过度索引导致系统性能下降。
4、什么情况下索引会失效
- 当我们使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效
- 当我们在查询条件中对索引列做了计算、函数、类型转换操作,这些情况下都会造成索引失效
- 联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效
- 在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效
- 字符串不加单引号,造成索引失效