0

サンプルテーブル

  1. フィールド 0 : いいえ (PK)
  2. フィールド 1 : タイトル
  3. フィールド 2 : 説明
  4. フィールド 3 : カテゴリ 1 (インデックス)
  5. フィールド 4 : カテゴリ 2 (インデックス)
  6. フィールド 5 : カテゴリ 3(インデックス)
  7. フィールド 6 : カテゴリ 4(インデックス)
  8. フィールド 7 : カテゴリ 5(インデックス)

上記は私のウェブサイトで使用するサンプルで、カテゴリ フィールドにはそれぞれインデックスがあります。

以下のこのコマンドのように実行すると

select * from table where category1=1 and category2=2 and category3=3 and category4=4 and category5=5

カテゴリ フィールドが 1 つしかないテーブルと、上記のテーブルのように多数のカテゴリがあるテーブルを比較します。どちらの方がよいですか?

もちろん、カテゴリ フィールドが 1 つしかないテーブルが適していることがわかりました。しかし、私は指数の計算プロセスに関する深い情報を本当に知りません。私は上司に彼らの間で何か違うことを説明しなければなりません!!!!

だから私はインデックスコスト、サンプルデータ、計算プロセスなどの「サンプル」でいくつかの情報を取得したいのですが、インデックス計算プロセスについて理解するのに役立ちます

4

3 に答える 3

0

以前にmvpによって既に記述されているように、EXPLAIN構文を使用して、クエリオプティマイザがクエリをどのように処理するかを確認します。一般に、mysqlは、アクセスするテーブルごとに1つのインデックスを使用して、探しているデータをフェッチします。オプティマイザは、可能なインデックスが複数ある場合に、選択性が最も高いものを見つけようとします。

たとえば、次のようなクエリがある場合があります。

SELECT * FROM table WHERE category1=1 AND category2=2 AND category3=3 AND category4=4 AND category5=5

category1、category2、category3、category4、category5を含む複合インデックス、またはcategory1とcategory2のみを含む複合インデックスを使用することができます。オプティマイザは、実行時にどちらを使用するかを決定します。

別の一般的な例は次のとおりです。

SELECT * FROM table WHERE category1=1 OR category2=2

クエリオプティマイザは、category1またはcategory2のインデックスのみを使用できますが、両方を使用することはできません。少なくともこれはmysqlEXPLAINが返したものでした。他のデータベースが両方の選択を並行して実行し、2つの結果を単純に結合して、重複を削除することが可能である可能性があります。

多くのインデックスを追加する前に、それらが生成するオーバーヘッドを覚えておいてください。書き込みアクセスよりも読み取りアクセスの方がはるかに多い場合は、うまくいく可能性があります。ただし、挿入または更新操作も多数ある場合は、インデックスを毎回調整する必要があります。これにより、追加の負荷が発生し、クエリの実行時間が長くなります。

フォローアップのために、このMysqlの章をお勧めしますMySQLがインデックスを使用する方法

于 2012-10-23T09:16:54.957 に答える
0

一般に、複数のWHERE制約があるクエリがある場合、最適なインデックスは、制約されたすべてのフィールドを含む複合インデックスです。この場合は、次のインデックスになります。(category1, category2, category3, category4, category5)

ただし、実際には、非常に多くの複合インデックスを持つことは本当に無駄です。また、インデックスは、選択性が高い場合にのみ役立ちます。たとえば、等しい確率(選択性1/2)で値0または1を持つ可能性のあるフィールドがある場合、そのようなフィールドにインデックスを作成したり、このフィールドを複合インデックスに含めたりする価値はほとんどありません。

いずれにせよ、常にEXPLAIN ANALYZEを実行して、クエリプランナーが何を考えているのか、どのインデックスを選択するのかを把握してください。シーケンシャルスキャンを使用している場合は、心配する必要があるかもしれませんが、常にそうとは限りません(たとえば、低い選択性インデックスを使用することは、プランナーにとって価値がない場合があります)

于 2012-10-23T08:40:56.130 に答える
0

EXPLAIN EXTENDED query-phraseを使用して、実行エンジンが何をするかを分析できます。最良のシナリオは、MySQL がインデックス マージを使用することです。これは、独自のインデックスを介してすべてのオプションを選択し、インデックスのヘルプなしで結果セットをマージすることを意味します。通常、複合インデックスははるかに高速ですが、それはレコード数と使用シナリオ (レコードの回転率が高いか低いか) によって異なる場合があります。

于 2012-10-23T08:48:55.177 に答える