第一章のSQL最適化データ・ストレージとインデックス

Shenkaoziliao:
ブログのこのシリーズは、主にCenkaoziliao CUUGデータベースRannaiギャング教師の授業ノートを持って、「SQL最適化コアアイデア」(Luobingセン、黄チャオ忠交通と)、「PostgreSQLの内側:クエリの最適化の深さ」(張Shujieのa)に、ランク付け順不同インチ

 

あらかじめご了承1

私たちは、インデックス作成のための最も簡単なツールであるSQLの最適化を行い、もちろん、また、両刃の剣は、それがインデックスの話以来、私たちはテーブルにデータを格納する方法について話します、とだけにして、私たちは基本的なインデックスを配置します原則として、インデックス、インデックスを使用する方法の明確な理解を構築するだけでなく、後のテーブルの結合のために地面を準備する理由。

データストレージ2

Oracleは物理的なストレージ構造と論理的な記憶構造に格納されたデータの完全なセットを持って、我々はあなたがニーズを持っている場合、我々は説明するために、別のトピックを開く、ここで言っても過言ではないを持っています。私たちは、主に3つのポイントをつかむためにここにいます。

ストレージは、(1)データは、例えば、熱ブロックは(バーの上にそれを理解していない、その理由は非常に単純ですが、順番に保存されている時間がかかり、リソースは、ストレージの最適化を助長されていません、無秩序で、我々はこれがためにDBAで、一時的であると理解しましたチューブ、DBAのも不思議ではありません...)。

読み出しによってメモリにディスクから(2)のデータブロックがバーによって読み取られていない、ブロックサイズが固定されているという単純な理由は、高速読み取り、もちろん、時には、読み出し複数回で、単一のブロックを読み取ります私たちは、インデックスの後ろの分析を結合します。

(3)各データベースレコードは行IDと呼ばれる唯一の定数仮想列に対応するファイル番号+行番号に対応するデータ・オブジェクト番号行ID = + +ブロック番号は、よく、彼らが始まっているため、これは、データを検索する最速の方法でありますインストールされ、私たちは、ROWIDがレコードの物理アドレスであることを理解します。

三点をまとめると、私たちが出て欲しいし、どのように我々は唯一の最初から最後まで見ることができ、やりたい、そこからデータを検索するテーブルを、持っていると、うまくそれが全表スキャンです。

そこで問題は、多くのこのテーブルは、一日あたりのクエリの数を実行することを想定して、すべての全表スキャンは、IOコストはシステムがなくなっ崩壊するのに十分です、何も言いませんさ。解決策は、以下の、インデックスを言うことです。

3インデックス

バランスの取れたツリーインデックス+二重にリンクされたリストの簡単な説明と3.1

私たちは、あなたがオンラインで所有することができ、ここでの唯一のB-treeインデックス、ビットマップ索引のを話しています。

最初の質問は、インデックスは何ですか?簡単に答え、索引構造は、ツリー構造+二重にリンクされたリストです。友人はそれは問題ではありません理解していない少しはあります、我々は層の用語を剥がします。

だから我々は、データが格納されていることを前提とし、バランスの取れた木+二重リンクリスト、検索に関するデータは、私たちは分析している以下の

(1)ルート5> 7を見ているときに我々は、数字7を探していると仮定しては、右の枝8> 7未満8> 7左側の枝、我々は3つだけが、実際には、これは倍の位置データを使用する> 5以上であるUNIQUE INDEXスキャン;

(2)我々が発見上記実施例7 7によって位置決め7と9の間でデータを探している以下の二重連結リスト10の右側走査が、9より大きいことが見出されている、走査が停止し、その後、実際には、これは仮定索引レンジ・スキャン ;

このような構造を説明していないことにより、(3)インデックススキップ走査(スキャンスキップ)、私たちはインデックスのケースに応じて、後でアプリケーションを説明します。

バランスの取れた木や二重リンクリストを構築、キーワードは、+バイナリ検索ソートされています

(1)まず、数字は、我々は昇順で、ここで、特定の順序で並んで

(2)バイナリサーチを、ここで行うには、中間部分ルートの値が5で見つけること、及び、各セグメントは最初の中間層をバイアスについて見つけ、ここで2,8、見て終了するまでに一つの分岐値を行います。

そこで問題は、インデックスがそれを命じているのですか?

答えはイエス、最初のステップは、それを並べ替えることです!

そして、賛否両論のインデックスが来ています、

(1)利点、高速な位置決めを、それが理解するように行の20回折り畳まれた任意の新聞と組み合わせることができません。

(2)それを傷つける、それは一種、明白であり、各時間データの変更は、我々は理解することは難しいことではありませんインデックス構造と秩序を維持しなければならない理由操作へのインデックスの追加および削除の影響。

(3)インデックスは時々我々章<3全表スキャンとインデックス・スキャンが選択>、ここで言うには時期尚早、選択操作に悪影響をもたらす説明します。

3.2インデックス記憶構造

私たちは理解し、簡単なバランスの取れたバイナリツリー索引を使用する上で、実際には、インデックスは、バイナリツリーではありません、それは、バイナリツリーの場合、インデックスは高くなり、それはレベルがたくさんある、ポジショニングの層は、位置決め速度に影響を与えます。

キーは、テーブルデータは迅速な位置決めを可能にするために、指標値がROWIDである場合にフィールド値であり、各ノードのデータ構造はキーと値のペアです。

これは、インデックス構造です。

3.3まとめ

(1)データ記憶構造上、我々のようなブロック単位で読み+ +無秩序ROWIDの概念を理解します。

(2)インデックス構造の上に、我々はインデックスがツリー構造である+二重メモリフィールド値にリストノードをリンクなどのROWID、我々はSQLの最適化を行っていることを理解し、具体的に理解などのインデックスデータ構造、下部に取得する必要はありませんが勉強していません。

おすすめ

転載: blog.csdn.net/songjian1104/article/details/91349914