ホームページ  >  記事  >  データベース  >  mysqlインデックスの原理は何ですか?

mysqlインデックスの原理は何ですか?

藏色散人
藏色散人オリジナル
2019-04-02 16:27:572336ブラウズ

この記事は主に mysql インデックスの原理を皆さんに紹介するもので、困っている友人のお役に立てれば幸いです。 (関連する推奨事項: 「mysql チュートリアル 」)

mysqlインデックスの原理は何ですか?

インデックスの目的

インデックスの目的インデックスはクエリの効率を向上させるためのものです。辞書に例えることができます。「mysql」という単語を調べたい場合は、必ず文字 m を見つけ、次に文字 y を下から下に見つけて、残りの文字を見つける必要があります。 SQL。インデックスがない場合は、目的の単語を見つけるためにすべての単語を調べる必要がある場合があります。m で始まる単語を検索したい場合はどうすればよいですか?あるいは「ぜ」で始まる言葉はどうでしょうか?指標がなければこの問題は全く終わらないというふうにお考えですか。

mysql インデックスの原則

辞書に加えて、インデックスの例は、駅の時刻表、書籍のカタログなど、生活のあらゆる場所で見ることができます。原理は同じで、取得したいデータの範囲を常に絞り込むことで、最終的に必要な結果をフィルタリングすると同時に、ランダムなイベントを連続したイベントに変えることができます。つまり、常に同じ検索を使用します。データをロックする方法。

同じことがデータベースにも当てはまりますが、同等のクエリだけでなく、範囲クエリ (>、<、between、in)、ファジー クエリ ( )、ユニオンクエリ (or) など。データベースはすべての問題に対処するためにどのように選択すべきでしょうか?

辞書の例に戻って考えてみましょう。データをセグメントに分割し、セグメントごとにクエリを実行できますか?最も簡単な方法は、データが 1,000 個ある場合、1 ~ 100 を第 1 セクションに分割し、101 ~ 200 を第 2 セクションに分割し、201 ~ 300 を第 3 セクションに分割して確認します。 250 番目のデータの場合は、3 番目のセクションを見つけるだけで、無効なデータの 90% が部分削除されます。

しかし、1,000 万件のレコードの場合、いくつのセグメントに分割する必要があるでしょうか?アルゴリズムの基礎を少しだけ理解している学生は、平均複雑度が lgN でクエリ パフォーマンスが優れている検索ツリーについて考えるでしょう。しかし、ここで重要な問題を見落としています。複雑さのモデルは、毎回同じ運用コストに基づいています。データベースの実装は比較的複雑で、データはディスクに保存されます。パフォーマンスを向上させるために、データの一部をディスクにアクセスするコストはメモリにアクセスするコストの約 100,000 倍であることがわかっているため、メモリを使用して計算するため、単純な検索ツリーでは複雑なアプリケーション シナリオに対応できません。

以上がmysqlインデックスの原理は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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