2

多くのインデックスのように見えるテーブルを使用しています-実際には8つです。ただし、それらのいくつかは冗長に見えます。たとえば、これらのインデックスのいくつかを次に示します。

type     columns
-----    ------------------------------
index    project_id
unique   project_id, user_id, event_id
index    project_id, user_id, type, subtype

さて、私が知っていることから、これら 3 つのキーの組み合わせの重複を防ぐために一意のキーが必要であり、それが必要です。しかし、最初のインデックスは不要ではないでしょうか。

私は簡単に実行しselect * from activities where project_id = 5579、4列のインデックスを使用しました( Explain に基づいています)。別のクエリでは、project_id を変更するだけで、一意のインデックスが使用されました。最初のインデックスがまだ使用されている状況はありますか?それとも安全に削除できますか?

この状況は、user_id 列にも当てはまります。それ自体でインデックスが作成され、最初の列が複数列のインデックスになります。

私の理解では、インデックスが多い=挿入が遅いので、不要なものを削除しようと考えています。

4

2 に答える 2

0

索引は、WHERE または GROUP BY が_idproject_id, user_id, type, subtypeだけを指定する場合をカバーします。project

于 2013-08-08T15:37:58.410 に答える
0

複合インデックスに関する重要な注意事項の 1 つは、インデックスにリストされるフィールドの順序が重要であるということです。

そのためproject_id, user_id, event_id、次の条件のいずれかが満たされている場合にのみ、インデックスにこのインデックスを使用できます。

project_idWHERE、GROUP BY、ORDER BY、または JOIN 条件で使用される OR project_idANDuser_idが WHERE、GROUP BY、ORDER BY、または JOIN 条件で使用される OR project_idAND user_idASevent_idが WHERE、GROUP BY、ORDER BY、または JOIN 条件で使用される

user_id使うのに疲れたり、自分だけで使ったりするのに疲れたらevent_id、インデックスは使用されません。使用しようとするuser_idevent_id、インデックスは使用されません。使用しようとするproject_idevent_id、インデックスは使用されません。

したがって、あなたの質問に答えるために、index_idここではインデックスは必要ない可能性がありますindex_id

もちろん、どのインデックスが必要で、どのインデックスが不要かを理解するために、テーブルをクエリする可能性のあるすべての方法を完全に理解している必要があります。

于 2013-08-08T15:45:40.860 に答える