MySQL底层索引性能优化
# 索引是帮助MySQl高效获取数据排好序的数据结构
# 索引数据结构
- 二叉树
- 红黑树(二叉平衡树)(缺点数据量过大时树高不可控)
- Hash表
- B-Tree
Data Structure Visualizations (opens new window) 可视化数据结构
# 存储引擎:
# MyISAM (不支持事务)
.MYI文件对应着B+树索引 .MYD为数据 (非聚集索引)
叶子节点存储的是数据地址
# InnoDB (支持事务)
- .ibd文件(内部结构就是B+树)
- 叶子节点存储的是完整的数据记录(聚集索引)
- 建议必须建主键尽量用自增整形(不建主键Mysql会自己找一列数值都唯一的数据去建主键,无值唯一则Mysql会自己建一列唯一的影藏数据,耗资源、低效率)(增为了插入效率高,不然会影响之前的索引结构)
二级索引叶子节点存的数据是主键
# 索引方法:
# B+Tree
- 非叶子节点不存储data,只存储索引(冗余)
- 叶子节点包含所有索引字段
- 叶子节点用指针连接,提高区间访问性能
# Hash
- 对索引key进行一次hash计算可以定位出数据存储位置
- 很多时候Hash要比B+树索引更高效
- 仅能满足"=" ,"IN",不支持范围查询
- hash冲突问题(Mysql底层有rehash概率很小)
# 联合索引
通常建议表建联合索引,尽量少单值索引 (可利用联合索引的排序规则去优化sql)
编辑 (opens new window)