0

現在、特定のSQLクエリに必要なため、インデックスを作成しています。しかし、それらは互いに重なり始めています。

それらを効果的に定義する規則はありますか?

例えば:

  • column1 と column2 に 2 つのインデックスがある場合、column1、column2 による複合インデックスは両方の列による選択を改善しますか?
  • column1 と column2 によるインデックスと、column2 と column1 によるインデックスとの違いは何ですか?
4

4 に答える 4

0

Q)column1(A)とcolumn2(B)の2つのインデックスがある場合、column1、column2による複合インデックスは、両方の列による選択を改善しますか?

  • はい、インデックスAとBが2つしかない場合は、2つのインデックスのSELECT something from table where A = 1 and B =2うちの1つだけを使用しますが、複合インデックスA、Bがある場合は、それを使用します。

Q)column1とcolumn2によるインデックスとcolumn2とcolumn1によるインデックスの違いは何ですか?

  • シーケンスは複合インデックスで重要です。上記と同じクエリがあり、テーブルが1 mlnエントリであり、そのうち50個だけがA = 1に一致し、10000個がB = 1に一致するとします。これは、複合インデックスA、BのパフォーマンスがB、Aよりもはるかに優れているためです。したがって、カーディナリティが最小のインデックスの最初の要素を選択する必要があります。

これは役に立つかもしれません

http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html http://stackoverflow.com/questions/1823685/when-should-i-use-a-composite-index

于 2012-11-02T11:56:32.513 に答える
0

Q: 列 1 と列 2 に 2 つのインデックスがある場合、列 1 と列 2 による複合インデックスは両方の列による選択を改善しますか?

はい、複合インデックスの方が優れています。

Mysqlから

"mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

複数列のインデックスが col1 と col2 に存在する場合、適切な行を直接フェッチできます。col1 と col2 に個別の単一列インデックスが存在する場合、オプティマイザーはインデックス マージ最適化 (セクション8.3.1.4「インデックス マージの最適化」を参照) を使用しようとするか、どのインデックスがより多くの行を除外するかを決定することによって、最も制限の厳しいインデックスを見つけようとします。そのインデックスを使用して行をフェッチします。」

Q: column1 と column2 によるインデックスと、column2 と column1 によるインデックスとの違いは何ですか?

はい、それは違いを生むでしょう。クエリの作成方法によって異なります。

Mysql ドキュメントから:

例 table に以下のようなインデックスがある場合:

INDEX名(姓、名)

「名前インデックスは、last_name 列と first_name 列のインデックスです。このインデックスは、last_name 値と first_name 値の組み合わせに対して既知の範囲の値を指定するクエリでの検索に使用できます。また、last_name のみを指定するクエリにも使用できます。その列はインデックスの左端の接頭辞であるためです。」

以下のクエリでインデックスを利用できます。

SELECT * FROM テスト WHERE last_name ='Widenius';

ただし、次のクエリのルックアップにはインデックスは使用されません。

SELECT * FROM テスト WHERE first_name ='マイケル';

これが役立つことを願っています!!

于 2012-11-02T11:33:03.557 に答える
0

2 つの列 A と B に対するインデックスは、列 A のインデックスとしても機能しますが、列 B のインデックスとしては機能しません。

インデックスに単純なルールがあるかどうかはわかりません。クエリの where 句と order by ステートメントに含まれる列を探して、どれを使用するかを評価するだけかもしれません。

インデックスは、小さなサブセットを検索する多数の行に対して意味があることに注意してください。インデックスも挿入と更新を遅くするため、賢く使用してください。多くの場合、パフォーマンスの問題が発生した場合は、JOIN に使用されるすべての行にインデックスを付け、さらに行を追加するだけで十分です。

于 2012-11-02T11:29:58.563 に答える
0

column1 と column2 に 2 つのインデックスがある場合、column1、column2 による複合インデックスは両方の列による選択を改善しますか?

はい、そうです。個別のインデックスを最初にマージする必要があります。そうしないと、1 つのインデックスだけが使用されます。

column1 と column2 によるインデックスと、column2 と column1 によるインデックスとの違いは何ですか?

複合インデックスでは、列の順序が重要です。クエリの WHERE 句に column2 しかない場合、(column1, column2) に対する複合インデックスは使用されません。

(column1, column2) に複合インデックスがある場合、クエリの WHERE 句に column1 しかない場合にも使用できます。

詳細については、インデックス作成に関する質問に対して私が行った他の回答を参照してください。

MYSQL ロング スーパーキー

LIKE term% ORDER BY int の MySQL クエリの最適化

于 2012-11-02T11:30:07.083 に答える