ホームページ  >  記事  >  データベース  >  インデックスを作成すると、テーブル内のデータのクエリを高速化できますか?

インデックスを作成すると、テーブル内のデータのクエリを高速化できますか?

(*-*)浩
(*-*)浩オリジナル
2019-07-30 14:57:346420ブラウズ

まず、インデックス作成によって速度が向上する理由を理解してください。DB が SQL ステートメントを実行するとき、デフォルトの方法では、検索条件に基づいてテーブル全体をスキャンし、一致する条件が見つかった場合に検索結果セットを追加します。

インデックスを作成すると、テーブル内のデータのクエリを高速化できますか?

#特定のフィールドにインデックスを追加すると、クエリはまずインデックス リスト内の特定の値を持つ行の数を見つけ、その結果、トラバーサル一致の数: 行数により、クエリ速度が大幅に向上します。 (推奨される学習: MySQL ビデオ チュートリアル )

インデックスを追加する場合は、まずインデックス リストでクエリを実行します。インデックス リストは、クラス B ツリー。クエリの時間計算量は O(log2N) です。特定の値の行を見つけるのが非常に速いため、クエリ速度は非常に速くなります。

実際のアプリケーションでは、オペレーティング システムのファイル インデックス作成やデータベース インデックス作成に、B ツリーよりも B ツリーの方が適しているのはなぜですか?

1) B ツリーのディスク読み取りおよび書き込みコストが低い

B ツリーの内部ノードには、キーワードに関する特定の情報へのポインタがありません。したがって、その内部ノードは B ツリーよりも小さくなります。同じ内部ノードのすべてのキーワードが同じディスク ブロックに格納されている場合、ディスク ブロックはより多くのキーワードを保持できます。検索する必要があるキーワードが多ければ多いほど、一度にメモリに読み込まれます。相対的に言えば、IO 読み取りおよび書き込みの数が減少します。

たとえば、ディスク内のディスク ブロックが 16 バイト、キーワードが 2 バイト、キーワード固有情報ポインタが 2 バイトであると仮定します。 9 次 B ツリーの内部ノード (1 つのノードに最大 8 つのキーワードを含めることができます) には 2 つのディスク ドライブが必要です。 B ツリーの内部ノードには 1 つのディスク速度のみが必要です。内部ノードをメモリに読み込む必要がある場合、B ツリーでは、B ツリーよりもディスク ブロックの検索時間 (ディスクの場合はディスクの回転時間) が 1 つ多く必要になります。

2) B ツリーのクエリ効率はより安定しています。

非終端ポイントは、最終的にファイルのコンテンツを指すノードではなく、単にファイルのコンテンツを指すノードであるためです。のリーフ ノード インデックス内のキーワード。したがって、キーワード検索では、ルート ノードからリーフ ノードまでのパスをたどる必要があります。すべてのキーワード クエリのパス長は同じであるため、各データのクエリ効率は同等になります。

インデックス

インデックスを使用すると、データベース テーブル内の特定の情報にすばやくアクセスできます。インデックスは、従業員テーブルの姓 (lname) 列など、データベース テーブル内の 1 つ以上の列の値を並べ替える構造です。特定の従業員を姓で検索したい場合、インデックスを使用すると、テーブル内のすべての行を検索するよりも早くその情報を取得できます。

注: すべてのデータベースが同じ方法でインデックスを使用するわけではありません。

原則として、テーブルにインデックスを作成する必要があるのは、インデックス付き列のデータが頻繁にクエリされる場合だけです。インデックスはディスク領域を占有し、行の追加、削除、更新が遅くなります。ほとんどの場合、データ検索におけるインデックスの速度上の利点が、その利点を大幅に上回ります。

MySQL 関連の技術記事の詳細については、MySQL チュートリアル 列にアクセスして学習してください。

以上がインデックスを作成すると、テーブル内のデータのクエリを高速化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。