1

a bfieldとcをその順序で含むカバリング インデックスがあります。

ALTER TABLE table ADD INDEX covering(a, b, c)

次のクエリは、カバリング インデックスを使用します。具体的には、カバリング インデックスの最初のフィールドのみを使用します。

SELECT * FROM table
GROUP BY a

のみを含む別のインデックスを作成すると、パフォーマンスが向上しaますか?

ALTER TABLE table ADD INDEX a(a)

SELECTまたは、上記のインデックスは、ステートメントのカバリング インデックスとまったく同じように機能しますか?

私のクエリがGROUP、カバリング インデックスのシーケンスの最初ではないフィールドに対して 'ing を実行していた場合はどうなりますか?

SELECT * FROM table
GROUP BY b

そして私のインデックスは

ALTER TABLE table ADD INDEX b(b)
4

1 に答える 1

1

複合インデックスをオンに(a, b, c)して使用する場合ORDER BY a、それは機能し、そのインデックスを利用します。インデックスを追加する(a)と、クエリ プランナーよりも優先されますが、インデックスにより多くのデータを保持する必要があり、テーブルが更新されたときに両方のインデックスを更新する必要があるため、無駄になります。より狭いインデックスを使用することで得られるメリットはわずかですが、そのメリットを定量化するのは難しい場合があります。

を使用したクエリに関してORDER BY bは、上記のインデックスのいずれも使用できませんでした。適切なパフォーマンスを得るには、(b)インデックスまたは複合インデックスを作成する必要があります。(b, ...)

于 2012-12-03T05:14:35.197 に答える