本文共 969 字,大约阅读时间需要 3 分钟。
什么是索引
1. 索引的定义
索引(Index)是MySQL高效数据检索的重要工具。简单理解:索引是一种排好序的快速查找数据结构,帮助数据库在数据中快速定位所需记录。
2. 索引的类型(结构)
索引可分为以下几种类型:
- FULLTEXT 全文索引:用于支持全文检索功能,适用于需要对文本内容进行全局搜索的场景。
- HASH 哈希索引:通过哈希算法快速定位数据,适合高并发读取场景。
- BTREE B树索引:常用作聚集索引、次要索引、覆盖索引等,B+树结构支持范围查询。
- RTREE:用于空间数据索引,常见于地理信息系统。
3. 索引种类
索引可根据字段特性分为以下几种:
- 单值索引:只包含单一字段,一个表可有多个单列索引。
- 唯一索引:索引字段值必须唯一,可含空值。
- 复合索引:包含多个字段的联合索引,适合高频查询条件。
索引的作用
- 提高数据检索效率:减少数据库IO运算,降低查询响应时间。
- 降低数据排序成本:减少CPU负载,提升整体系统性能。
索引的使用
1. 创建索引的场景
- 主键自动建立唯一索引:主键字段通常自动生成唯一索引。
- 高频查询字段:对经常作为查询条件的字段创建索引。
- 外键关系索引:对外键字段建立索引,提升关联查询效率。
- 索引选择与组合:在高并发环境中,通常优先选择组合索引。
- 排序字段索引:对排序操作的字段建立索引。
- 统计或分组字段索引:对分组或统计操作的字段建立索引。
2. 不要创建索引的情况
- 表记录少于5000条:索引对小数据集无明显效率提升。
- 频繁增删改的表:索引会增加数据修改的复杂性。
- 数据重复且分布均匀的字段:重复数据的字段索引效果有限。
- 频繁更新的字段:索引会对更新操作造成额外负担。
索引失效的情况
索引失效会导致全表扫描,影响查询性能。以下情况会导致索引失效:
- 索引列进行计算或函数操作:如
CONCAT
、NOW()
等操作。 - 使用
select *
:会导致索引失效,提升全表扫描效率。 - 使用
!=
或<>
:如WHERE a != 'b'
等不等于操作。 IS NULL
或IS NOT NULL
:无法利用索引进行查询。 LIKE
以通配符开头:如'abc%'
或'_abc'
。 - 字符串字段未加单引号:会导致索引失效。
- 少用
OR
连接条件:使用OR
会导致索引失效。
通过合理设计索引,可以显著提升数据库查询效率,优化系统性能。
转载地址:http://txdfk.baihongyu.com/