【数据库】【MySQL】索引
MySQL中索引的概念
索引(MySQL中也叫做"键(key)")是一种数据结构,用于存储引擎快速定找到记录。
简单来说,它类似于书籍的目录,通过索引可以快速找到对应的数据行,而无需遍历整个表。索引建立在表的列上,通过对列中的数据进行特定的排序和存储方式,使得数据库在执行查询操作时,能够迅速定位到满足条件的数据。例如,在一个包含大量用户信息的表中,如果没有索引,当要查询某个特定用户时,可能需要逐行检查每一条记录;而有了索引,数据库可以直接根据索引找到对应的用户记录,大大提高了查询效率。索引不仅可以用于加速查询,还能在数据唯一性约束、排序操作等方面发挥重要作用 。
索引的作用
- 加快数据检索速度:通过索引可以快速定位到符合条件的数据行,减少全表扫描的次数,从而大大提高查询效率。
- 在牺牲少量写入性能的前提下,显著提升查询效率
- 唯一索引和主键索引能确保表中特定列的数据唯一性,避免重复数据的插入,保证数据的完整性。
索引的优缺点
优点
- 提高查询速度,减少查询时间,提升数据库的响应性能。
- 可以强制数据的唯一性,维护数据的完整性和一致性。
缺点
- 占用存储空间:索引本身需要占用一定的磁盘空间,特别是在数据量较大的情况下,索引占用的空间也会相应增加。
- 影响写入性能:在插入、更新和删除数据时,不仅要更新数据本身,还要更新对应的索引,会增加操作的时间和资源消耗。
MySQL中主流索引类型详解
索引有很多种不同的类型,可以为不同的场景提供更好的性能。在MySQL中,索引是在存储引擎层而不是在服务器层实现的。所以并没有同一的索引标准:不同存储引擎支持的索引不完全相同,不同的存储引擎相同索引的底层实现不一样,工作方式也不同。
核心索引类型对比
索引类型 | 存储引擎支持 | 数据结构 | 是否唯一 | 支持操作 | 典型应用场景 | 索引示例SQL |
---|---|---|---|---|---|---|
B+Tree索引 | InnoDB/MyISAM | B+Tree | 可选 | =, >, <, >=, <=, BETWEEN, ORDER BY, LIKE ‘prefix%’ | 主键索引、普通索引、联合索引 | CREATE INDEX idx_name ON users(last_name) |
哈希索引 | MEMORY引擎显式支持 InnoDB自适应哈希隐式使用 | Hash Table | 可选 | 仅精确匹配 (=, <=>) | 内存表(MEMORY引擎)、等值过滤 | CREATE TABLE mem_table (...) ENGINE=MEMORY |
全文索引 | InnoDB(5.6+)/MyISAM | 倒排索引 | 不支持 | MATCH() AGAINST() 支持自然语言/布尔搜索 | 文章内容搜索、商品描述查询 | ALTER TABLE articles ADD FULLTEXT(title,body) |
空间索引 | InnoDB(5.7+)/MyISAM | R-Tree | 不支持 | GIS关系运算 (ST_Contains, ST_Distance等) | GIS数据查询、地图坐标查询、地理围栏判断 | CREATE SPATIAL INDEX sp_idx ON lands(poly) |
主键索引 | 所有引擎 | B+Tree | 强制唯一 | 与B+Tree相同 | 表的主标识字段 | CREATE TABLE ... PRIMARY KEY(id) |
关注我!下一篇,我们继续详细学习不同类型的索引!