インデックスとは何ですか
ライフインデックス
MySQLはインデックスの公式な定義です:ヘルプのMySQLへのインデックス(指数)は、効率的にデータのデータ構造を取得します。
インデックスは、自然の中で取得できます。インデックスは、データ構造です。
より抽象的な理解の上、例を与え、通常はどんな本を見て、非常に迅速にコンテンツ内のディレクトリの本を通じて照会を行うために、ディレクトリを参照してくださいする最初のです。
図はJinpingmeiブック、書籍であり、ディレクトリが順次配置され、格納された配列、配列構造自体である第一、第二のデータ構造体があります。
この単純な場合は、そのように理解することができても、カタログ(インデックス)を介して、あなたはすぐにクエリコンテンツディレクトリに、それは効率的に、データを取得することができ、データ収集の効率的なデータ構造
髪の外観は、状況を複雑にし、
私たちは、ノード構成全体のインデックスは、ルートノードは、以下の中間ノード、中間ノードとを持っているので、その異なるブックの内容は、機密保管されている、この本は確かに線形ストレージライブラリではなく、本を見つけるために図書館になるだろう子ノードで、最後の層は、リーフノードです、
目に見える、インデックス全体の構造が逆さまの木である、実際には、それはデータ構造であり、線形ディレクトリよりもこのデータ構造は、クエリの速度を上げるために、以前より良い述べました。
インデックスのMySQL
インデックス内のMySQLが実際にそのようなことで、私たちは、このような主キーのインデックスがデフォルトで作成された主キーを作成するよう、データベース内のインデックスのシリーズを作成することができ、マップはBTREEインデックスです。各ノードIDは主キーです
我々はIDでクエリを来るときは、最初のインデックス、すぐにインデックスを見つけることができますインデックスの後、ライブラリ内の特定の場所を確認するために図書館に行きます。
下のB +木に
B + TREEその白や木について話をしたいが、また、私は基礎から開始する前にこの話を始めました
バイナリ検索
バイナリサーチ(バイナリサーチ)も、レコードの配列に並べられたレコードのセットを見つけるために、バイナリ検索を知られています。
基本的な考え方は次のとおりです。順序(昇順または降順)ため、内のレコードは、比較としての第1の順序付けられたシーケンスの中間位置することを見つけるために、発見モード中にジャンプを使用して、値が小さい探し要素を超える場合左半分に減少し、中点要素の順序、右半分の意志そうでない場合は原因不明。比較すると、見た目の間隔が半分に減少します。
#の例では、昇順にソートされていることを、メモして例を挙げると、数48を見つけるために、
数据:5, 10, 19, 21, 31, 37, 42, 48, 50, 52
下标:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
• 步骤一:设 low 为下标最小值 0 , high 为下标最大值 9 ;
• 步骤二:通过 low 和 high 得到 mid ,mid=(low + high) / 2,初始时 mid 为下标 4 (也可以=5,看具体算法实现);
• 步骤三 : mid=4 对应的数据值是31,31 < 48(我们要找的数字);
• 步骤四:通过二分查找的思路,将 low 设置为31对应的下标 4 , high 保持不变为 9 ,此时 mid 为 6 ;
• 步骤五 : mid=6 对应的数据值是42,42 < 48(我们要找的数字);
• 步骤六:通过二分查找的思路,将 low 设置为42对应的下标 6 , high 保持不变为 9 ,此时 mid 为 7 ;
• 步骤七 : mid=7 对应的数据值是48,48 == 48(我们要找的数字),查找结束;
通过3次 二分查找 就找到了我们所要的数字,而顺序查找需8
二叉树(Binary Tree)
每个节点至多只有二棵子树;
• 二叉树的子树有左右之分,次序不能颠倒;
2x -1
• 一棵深度为k,且有 个节点,称为满二叉树(Full Tree);
• 一棵深度为k,且root到k-1层的节点树都达到最大,第k层的所有节点都 连续集中 在最左边,此时为完全二叉树(Complete Tree)
平衡二叉树(AVL-树)
l 左子树和右子树都是平衡二叉树;
l 左子树和右子树的高度差绝对值不超过1;
◦ 平衡二叉树
◦ 非平衡二叉树
平衡二叉树的遍历
l 前序 :6 ,3, 2, 5,7, 8(ROOT节点在开头, 中 -左-右 顺序)
l 中序 :2, 3, 5, 6,7, 8(中序遍历即为升序,左- 中 -右 顺序)
l 后序 :2, 5, 3, 8,7, 6 (ROOT节点在结尾,左-右- 中 顺序)
平衡二叉树的旋转
需要通过旋转(左旋,右旋)来维护平衡二叉树的平衡,在添加和删除的时候需要有额外的开销。
B+树
B+树的定义
l 数据只存储在叶子节点上,非叶子节点只保存索引信息;
◦ 非叶子节点(索引节点)存储的只是一个Flag,不保存实际数据记录;
◦ 索引节点指示该节点的左子树比这个Flag小,而右子树大于等于这个Flag
l 叶子节点本身按照数据的升序排序进行链接(串联起来);
◦ 叶子节点中的数据在 物理存储上是无序 的,仅仅是在 逻辑上有序 (通过指针串在一起);
B+树的作用
l 在块设备上,通过B+树可以有效的存储数据;
l 所有记录都存储在叶子节点上,非叶子(non-leaf)存储索引(keys)信息;
l B+树含有非常高的扇出(fanout),通常超过100,在查找一个记录时,可以有效的减少IO操作;
B+树的扇出(fan out)
n 该 B+ 树高度为 2
n 每叶子页(LeafPage)4条记录
n 扇出数为5
n 叶子节点(LeafPage)由小到大(有序)串联在一起
扇出 是每个索引节点(Non-LeafPage)指向每个叶子节点(LeafPage)的指针
扇出数 = 索引节点(Non-LeafPage)可存储的最大关键字个数 + 1
图例中的索引节点(Non-LeafPage)最大可以存放4个关键字,但实际使用了3个;