一、mysql 索引(左小右大)
下图中为二叉树
mysql索引类型以及数据结构
BTREE结构
BTree又叫多路平衡搜索树,一颗m叉的BTree特性如下:
-
树中每个节点最多包含m个孩子。
-
除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子。
-
若根节点不是叶子节点,则至少有两个孩子。
-
所有的叶子节点都在同一层。
-
每个非叶子节点由n个key与n+1个指针组成,其中[ceil(m/2)-1] <= n <= m-1
以5叉BTree为例,key的数量:公式推导[ceil(m/2)-1] <= n <= m-1。所以 2 <= n <=4 。当n>4时,中间节点分裂到父节点,两边节点分裂。
插入 C N G A H E K Q M F W L T Z D P R X Y S 数据为例。
演变过程如下:
1). 插入前4个字母 C N G A
2). 插入H,n>4,中间元素G字母向上分裂到新的节点
3). 插入E,K,Q不需要分裂
4). 插入M,中间元素M字母向上分裂到父节点G
5). 插入F,W,L,T不需要分裂
6). 插入Z,中间元素T向上分裂到父节点中
7). 插入D,中间元素D向上分裂到父节点中。然后插入P,R,X,Y不需要分裂
8). 最后插入S,NPQR节点n>5,中间节点Q向上分裂,但分裂后父节点DGMT的n>5,中间节点M向上分裂
到此,该BTREE树就已经构建完成了, BTREE树 和 二叉树 相比, 查询数据的效率更高, 因为对于相同的数据量来说,BTREE的层级结构比二叉树小,因此搜索速度快。
B+树的数据结构
索引设计原则
sql优化重点
show status like 'Com_______';
show global status like 'Innodb_rows%';
查询到goods_innobd表中有两行数据
查询之后数据表行自动统计了统计两行,ows_read表示读取的行数有多少行
删除与更新插入show global status like 'Innodb_rows%';都会自动统计
定位低效的sql语句
show processlist; 慢查询日志
查询一个有三百万条记录的数据表
explain 查询重点
explain之id
explain之select_type
explain之type
分析sql语句性能的show profile
show profiles; 列出所有语句耗时
shw profile for query 5; 分析单条语句耗时
列出各个阶段所消耗的时间
也可以加上一些参数查看
trace 分析优化器执行计划