MySQL底层索引性能优化

# 索引是帮助MySQl高效获取数据排好序的数据结构

# 索引数据结构

  • 二叉树
  • 红黑树(二叉平衡树)(缺点数据量过大时树高不可控)
  • Hash表
  • B-Tree

Data Structure Visualizations (opens new window) 可视化数据结构

# 存储引擎:

# MyISAM (不支持事务)

  • .MYI文件对应着B+树索引 .MYD为数据 (非聚集索引)

  • 叶子节点存储的是数据地址

    MyISAM-IndexShow

# InnoDB (支持事务)

  • .ibd文件(内部结构就是B+树)
  • 叶子节点存储的是完整的数据记录(聚集索引)
  • 建议必须建主键尽量用自增整形(不建主键Mysql会自己找一列数值都唯一的数据去建主键,无值唯一则Mysql会自己建一列唯一的影藏数据,耗资源、低效率)(增为了插入效率高,不然会影响之前的索引结构)

InnoDB-IndexShow 二级索引叶子节点存的数据是主键 InnoDB-IndexShow-2

# 索引方法:

# B+Tree

  • 非叶子节点不存储data,只存储索引(冗余)
  • 叶子节点包含所有索引字段
  • 叶子节点用指针连接,提高区间访问性能

# Hash

  • 对索引key进行一次hash计算可以定位出数据存储位置
  • 很多时候Hash要比B+树索引更高效
  • 仅能满足"=" ,"IN",不支持范围查询
  • hash冲突问题(Mysql底层有rehash概率很小)

# 联合索引

通常建议表建联合索引,尽量少单值索引 (可利用联合索引的排序规则去优化sql)

joint-index

最近更新
01
与java交个朋友
10-28
02
Spring IOC
08-31
03
CentOS 7 系统备份与还原
08-28
更多文章>