mysql里索引的数据结构
·
在 MySQL(InnoDB)数据库中,索引的底层数据结构主要包括 B+树、哈希索引、全文索引 和 R-Tree。其中,B+树 是最常见的索引结构,适用于大多数查询场景。
1. B+ 树索引(B+Tree Index)
(1)特点
- 多层平衡树结构,所有数据存储在叶子节点。
- 叶子节点按顺序存储,支持范围查询和排序。
- 非叶子节点只存储键值,不存储具体数据,减少磁盘 I/O。
- 自带排序,适合
ORDER BY、BETWEEN等查询。
(2)示例
假设有一张证券交易流水表 (trades),trade_date 字段建立了 B+ 树索引:
CREATE INDEX idx_trade_date ON trades(trade_date);
当执行查询:
SELECT * FROM trades WHERE trade_date BETWEEN '2023-01-01' AND '2024-01-01';
MySQL 直接在 B+ 树索引中找到第一个匹配的叶子节点,然后顺序扫描,避免全表扫描,提高查询性能。
2. 哈希索引(Hash Index)
(1)特点
- 基于哈希表,只适用于等值查询(
=)。 - 不支持范围查询(如
BETWEEN)、排序(如ORDER BY)。 - 适用于 查询速度极快但数据更新不频繁的场景。
(2)示例
对于用户登录验证:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password_hash CHAR(64) NOT NULL,
UNIQUE KEY idx_username (username) USING HASH
);
执行:
SELECT * FROM users WHERE username = 'zhangsan';
MySQL 通过哈希函数快速计算 username 的存储位置,直接找到匹配记录。
适用场景:用户 ID、唯一键(UUID)、哈希匹配等。
3. 全文索引(FULLTEXT Index)
(1)特点
- 用于大文本字段(如
VARCHAR、TEXT)。 - 适用于模糊匹配、搜索引擎。
- 支持倒排索引,比
LIKE查询更高效。
(2)示例
在文章内容字段上创建全文索引:
CREATE FULLTEXT INDEX idx_content ON articles(content);
查询包含“证券交易”相关内容的文章:
SELECT * FROM articles WHERE MATCH(content) AGAINST ('证券交易');
适用场景:新闻搜索、电商商品搜索、证券公告查询等。
4. R-Tree 索引(用于空间索引)
(1)特点
- 用于地理位置查询,支持 GIS(地理信息系统)。
- 适用于范围查询,如“查找某个区域内的证券交易所”。
(2)示例
在地理位置信息表上建立 R-Tree 索引:
CREATE SPATIAL INDEX idx_location ON locations(geo_point);
查询特定范围内的证券交易所:
SELECT * FROM locations
WHERE ST_Contains(ST_GeomFromText('POLYGON(...)'), geo_point);
适用场景:地图查询、地理数据分析、城市分布统计。
5. 索引结构对比
在证券交易系统中,B+ 树索引是最常用的结构,适用于交易流水、账户信息等数据查询。你们的系统目前主要使用哪种索引?遇到了哪些查询优化问题?
更多推荐

所有评论(0)