It's our wits that make us men.

mysql优化

Posted on By eatMelon-Masses

innodb逻辑存储结构

mysql 表中的所有数据被存储在一个空间内,称之为表空间,表空间内又可以分为段、区、页、行,逻辑结构如下图:

b树和b+树

b树 满足以下条件,即可称为m阶b树

  1. 每个节点至多拥有m颗子树
  2. 根节点至少有2颗子树
  3. 除了根节点,其余每个分支节点至少拥有m/2颗子树
  4. 所有叶节点都在同一层上
  5. 有k颗子树的分支节点则存在k-1个关键码,关键码按照次序进行排序
  6. 关键字数量需要满足ceil(m/2)-1 《= n 《= m-1

b+树 满足以下条件,即可称之为m阶b+树

  1. 根节点只有一个,分支数量范围为【2-m】
  2. 分支节点,每个节点包含分支数量为【ceil(m/2),m】
  3. 分支节点的关键字数量等于其子分支的数量减一,关键字的数量为【ceil(m/2)-1,m-1】关键字顺序递增;
  4. 所有叶子节点都在同一层上。

b 树与 b+ 树区别

  1. 关键字不同:b+ 树中分支节点有m个关键字,其叶子节点也有m个,但是b树虽然也有m个字节点,但是其只拥有m-1个关键字
  2. 存储位置不同:b+树非叶子节点的关键字只起索引作用,实际的关键字存储在叶子节点,b树的非叶子节点叶存储关键字。
  3. 分支构造不同:b+树的分支节点仅仅存储关键字信息和儿子的指针,也就是说内部节点仅仅包含着索引信息。
  4. 查询不同(稳定):b树在找到具体的数值以后,则结束,而b+树则需要通过索引找到叶子节点中的数据才结束,也就是说b+树的搜索过程中走了一条从根节点到叶子节点的路径

sql 执行顺序

以下每个每一步操作都会生成一个虚拟表,作为下一个处理的输入,在这个过程中,这些虚拟表对于用户都是透明的,只用最后一步执行完的虚拟表返回给用户,在处理过程中,没有的步骤会直接跳过。

(8). select (9) distinct<select list>
(1) from <left_table>
(3) <join_type>JOIN<right_table>
(2) ON<join_condition>
(4)where<where_condition>
(5) group by <group_by_list>
(6) with{cube|rollup}
(7) having<having_condition>
(10) order by <order_by_list>
(11) limit<limit_number>