Mysql インデックス データの並べ替え

黄舟
リリース: 2017-01-20 17:01:30
オリジナル
1739 人が閲覧しました

前の記事では、B-TREE のいくつかの構造と保存方法を簡潔に紹介しましたが、インデックスとデータの関係はまだ結びついていないように見えます

そこで、この記事では、データ行の実際の例を通して、インデックスを作成した後、B+TREE でソートされる順序は何ですか。

1. シミュレーションしてオリジナルデータを作成します

下の図では、便宜上、左側がシミュレーションされたデータです。エンジンはmysiam〜

右側はEXCELでランダムに並べたあとの通常のシミュレーションデータテーブルです。主キーを1~27に従って並べています(ランダムでない場合はシミュレーション時に順番に書きます)。データを作成し、インデックスを追加して確認します。インデックスの並べ替えのプロセスは明らかではありません)

つまり、右側のデータ、つまりテストしたい元のデータは、インデックスが構築される前にこのように並べ替えられており、後続のすべてのデータは、次のようにこれに基づいて作成されます。インデックス生成後の並べ替え効果を確認することをお勧めします。

テーブルには 4 つのフィールド (id、a、b、c) があり、合計 27 行のデータがあります

Mysql インデックス データの並べ替え

2. 以下に示すように、インデックス a を作成した後、インデックス構造内にインデックス a を作成します

。 , from 主キー ID によるソートが新しいルールになりました。インデックスは実際にはデータ構造であると言えます。次に、新しい構造を作成するインデックス a を作成し、フィールド a の規則に従って並べ替えます。主キー ID で表される最初のデータ行は 1、2 番目のデータ行は ID=3 で表され、3 番目のデータ行はID=5 のデータ行で表されます。 。 。

Mysql インデックス データの並べ替え


新しい並べ替え主キー ID (ID はデータの行を表します): 1 3 5 6 9 16 18 23 26 2 10 11 12 13 14 15 20 25 4 7 8 17 19 21 22 24 27

フィールド a が同じ場合、配列の前後で主キー ID でソートされることは難しくありません。たとえば、a=1.1 という値もありますが、そのソートは ID 値です。は 1、3、5、6 です。 。対応する行は主キー ID と同様の順序でソートされます。 (つまり、同じ値の並べ替えでは、ID が小さい方が前になります)


3. 以下のようにインデックス (a, b) を作成します。

結合インデックス (a, b) を作成した後、インデックス構造は、元の主キー ID によるソートから、最初にフィールド a に従ってソートし、次に a に基づいてフィールド b に従ってソートする新しいルールになりました。つまり、インデックス a に基づいて、フィールド b もソートされます。

Mysql インデックス データの並べ替え

新しい並べ替え主キー ID (ID はデータ行を表します): 6 18 23 10 15 20 7 22 27 1 3 26 2 11 25 4 8 24 5 9 16 12 13 14 17 19 21

フィールド a と b の値が同じ場合、それらの配置も次のように決定されることを見つけるのは難しくありません。主キー ID (例: a=1.1 および b=2.1 の行 (18,6,23) でもありますが、その順序は 6,18,23 です。

フィールド (a,b) インデックス、最初にインデックスで並べ替え、次に a に基づいて b で並べ替えます

6 18 23 10 15 20 7 22 27 1 3 26 2 11 25 4 8 24 5 9 16 12 13 14 17 19 21


IV. インデックス (a,b,c)

フィールド (a,b,c) インデックスを作成し、最初に a,b インデックスで並べ替え、次に (a,b) に基づいて並べ替えます。 ) 上記では、c

Mysql インデックス データの並べ替え

新しいソート主キー ID (ID はデータの行を表します) に従って並べ替えます: 23 6 18 15 20 10 27 22 7 1 26 3 11 2 25 24 4 8 5 16 9 12 14 13 17 19 21


5. 結論:


Mysql インデックス データの並べ替え

Mysql インデックス データの並べ替え

と前の記事 Mysql -index-BTree タイプ [簡略化] では、B-TREE ツリーの最後の行のリーフ ノードがこの順序で左から右に配置されます。この順序があれば、データを読み込む処理(部屋を探す処理に相当)は、インデックス(部屋登録テーブル)がある場合は、それを最初に読み込む必要があることがわかります。インデックス データ構造 (データが小さく、読み取りが速いため) のリーフ ノードで、実際の物理ディスクの記憶場所を検索し (ハウス番号を見つけるのと同じ)、ハウス番号を使用してディスクに移動してデータを直接取得します。これはデータを読み取るプロセスです。インデックスがない場合は、部屋から部屋へと検索するだけで目的地がわかりません。

インデックスがない場合、主キー ID は実際にはそのインデックスであり、主キー ID の規則に従って小さいものから大きいものまで配置されます。

インデックスがある場合は、インデックス a、結合インデックス (a, b)、ジョイント インデックス (a、b)、c) 対応する 3 つの B+TREE 構造では、リーフ ノードの端が指す物理ディスクが異なります。

結論:

1. インデックスが作成されていない場合は、ID の主キーに従って昇順に配置されます

2. インデックス a が作成されると、新しい構造インデックス (B+TREE) が作成されます。新しいものを記録するために生成されます

3. インデックス a、インデックス ab、およびインデックス abc を作成する場合、これら 3 つの対応するデータの順序は異なります

4. インデックス abc はインデックス ab とインデックスを考慮します。インデックスaなので、前者が利用可能な場合、後者2つは確立する必要はありません

5. インデックスが確立されると、インデックスのない列はデフォルトで ID の昇順でソートされます


その他の結論: Mysql-index の概要: http://blog.csdn.net/ty_hf/article/details/ 53526405


新しいデータが挿入されると、データの保存中に、このテーブルのインデックスも維持され、適切な場所に配置されます。データの量が特に多い場合、インデックスが頻繁に挿入および削除されると、インデックスの維持に時間がかかることになる理由について説明します。 ? 500W?検証する必要があります。

上記は Mysql-index データソートの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート