Mysql インデックスの概要

黄舟
黄舟オリジナル
2017-01-20 17:17:111216ブラウズ

インデックスは、MySQL がデータを効率的に取得するのに役立つデータ構造です。

以下は、私がまとめた情報と私自身の学習の要約です。


1. インデックスを使用する必要は本当にありますか?


すべてのパフォーマンスの問題がインデックスの作成によって解決できるわけではありません。パフォーマンスの問題を解決する方法は他にもたくさんあります

a)。データベース パラメーターとバッファーのチューニング

c). データベース接続プール サイズまたはスレッド プール サイズの調整、

d) データベース トランザクション分離レベルの調整、

f) 不必要なテーブル ロックを回避するためのバッチ削除の調整、

その他。


2. mysql インデックス タイプの通常、一意、フルテキストの違い


1. PRIMARY、INDEX、UNIQUE これら 3 つのタイプは同じタイプです

normal: 通常のインデックス

unique:フィールド情報が重複しないことが保証されている場合、重複インデックスは許可されません。たとえば、ID 番号がインデックスとして使用される場合、特に、主キーの Primary_key のデフォルトは non- に設定できます。空で一意です

2.FULLTEXT は記事で使用される全文インデックスです。記事では、テキスト情報が取得されます。

全文: 全文検索のインデックスを表します。 FULLTEXT は、長い記事を検索する場合に最適です。比較的短い文章に使用され、1~2行程度であれば通常のINDEXでも使用できます。

要約すると、インデックスのタイプはインデックス付きフィールドのコンテンツ特性によって決まり、通常は通常が最も一般的です。

詳細情報の参照: http://blog.sina.com.cn/s/blog_887d00920100wgf3.html


3. インデックスの使用を効率化するために、作成時にインデックスを作成する場合は、どのフィールドにインデックスを付けるか、どのタイプのインデックスを作成するかを検討する必要があります。

このセクションでは、読者にいくつかのインデックス設計原則を紹介します。いい物!

1.一意で単調なインデックスを選択してください

一意のインデックスの値は一意であり、インデックスを通じて特定のレコードをより迅速に決定できます。たとえば、学生テーブルの中学校 ID は一意のフィールドです。このフィールドに一意のインデックスを確立すると、特定の学生の情報を迅速に特定できます。名前を使用すると、同じ名前が存在する可能性があり、クエリ速度が遅くなります。単調性とは、IDなどの数字が増減する方が効率が良いことを指します (7.mysql-クラスタードインデックスにおけるランダム主キーの効率性.note)

2.並べ替え、グループ化、および結合操作が頻繁に必要となるフィールドのインデックスを作成します。ORDER BY、GROUP BY、DISTINCT、UNION などの操作が頻繁に必要となるフィールドの場合、並べ替え操作に多くの時間がかかります。インデックスを付けると、並べ替え操作を効果的に回避できます。

3.クエリ条件としてよく使用されるフィールドのインデックスを作成します

フィールドがクエリ条件としてよく使用される場合、このフィールドのクエリ速度はテーブル全体のクエリ速度に影響します。したがって、このようなフィールドにインデックスを作成すると、テーブル全体のクエリ速度が向上します。

4.インデックスの数を制限する

インデックスの数は、常に良いとは限りません。各インデックスにはディスク容量が必要になります。インデックスが増えると、より多くのディスク容量が必要になります。テーブルが変更された場合、インデックスを再構築して更新するのは面倒です。インデックスが増えると、テーブルの更新に時間がかかります。

5.インデックス値が非常に長い場合は、クエリ速度に影響を与えるため、少量のデータを含むインデックスを使用するようにしてください。たとえば、CHAR(100) 型フィールドの全文検索は、CHAR(10) 型フィールドよりも確実に時間がかかります。それは避けられません。解決策 6 を参照してください。

6.プレフィックスを使用してインデックスを作成してみてください

インデックス フィールドの値が非常に長い場合は、値のプレフィックスを使用してインデックスを作成するのが最善です。たとえば、TEXT および BLOG タイプのフィールドの全文検索は時間の無駄です。フィールドの最初の数文字のみを取得する場合、取得速度を向上させることができます。

オンライン記事の参考資料: (MySQL プレフィックス インデックスとインデックス選択性) http://www.cnblogs.com/gomysql/p/3628926.html

7. 結合インデックスの順序に注意し、左側の一致に従ってください。 match

select 内の where 条件の順序は重要ではありません。SQL カーネルはそれを並べ替えて最適化しますが、結合インデックスを確立する場合は、左プレフィックスの原則に従います。 5.4 mysql-index データ構造.note 最終結論

8.使用されなくなった、またはめったに使用されないインデックスを削除します

テーブル内のデータが頻繁に更新されたり、データの使用方法が変更された後、元のインデックスの一部が必要なくなる場合があります。データベース管理者は、更新操作に対するインデックスの影響を軽減するために、これらのインデックスを定期的に見つけて削除する必要があります

9. インデックスの数が多いほど、対応する選択の効率は確実に向上します。同時に、挿入や更新の効率も低下します。これは、挿入または更新時にインデックスが再構築される可能性があるためです。そのため、特定の状況に応じてインデックスの構築方法を慎重に検討する必要があります。テーブルに 6 つを超えるインデックスを持たないことをお勧めします。多すぎる場合は、一般的に使用されない一部の列にインデックスを構築する必要があるかどうかを検討する必要があります。

10.emunの場合、または1桁レベルのフィールドしかない場合は、インデックスを追加する必要はありません

極端なケースでは、900,000 データの場合、ソースには 0 と 1 の 2 つの値しかありません。インデックスを使用するには、まずインデックス ファイルを読み取り、次にバイナリ検索を実行して、対応するデータのデータ ディスク ポインターを見つける必要があります。次に、読み取りポインターに基づいてディスクを読み取り、対応するデータは 450,000 の結果セットに影響します。この場合、直接フルテーブルスキャンよりも高速です。

11. インデックスはグループ化に効果的です

本質は並べ替えプロセスでもあり、インデックスは6を達成するのに役立ちます mysql-index 最適化戦略.note 3 番目の項目

気づかずにたくさんの行を見てしまい、一度にすべてを思い出すことはできませんが、上記の各項目をよく考えてみると、これは本当に支払うべきです。制作時や応用時における注意点 何か問題が見つかったときは、上記の点に注意していただければ非常に助かります。したがって、要約は次のとおりです:

Mysql インデックスの概要

注: インデックスを選択する最終的な目的は、クエリを高速化することです。上記の原則は最も基本的なガイドラインですが、上記のガイドラインに固執することはできません。

読者は今後の勉強や仕事で実践を続けてください。アプリケーションの実態に基づいて分析・判断し、最適なインデックス方法を選択します。

上記は Mysql-index の概要です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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