0

かなり複雑な mysql クエリがあり、インデックスを使用する方法があるかどうかを理解しようとしています。クエリは次のようになります。

SELECT t1.a, t1.b, t2.c, COUNT(t1.li), SUM(t1.tc)
FROM t1 LEFT JOIN t2 
ON (t1.d=t2.d AND t1.e=t2.e) 
WHERE t1.pt="XXX" GROUP BY t1.a, t1.b, t2.c
HAVING t1.li > 0 AND t1.tc > 4;

t1.pt (または "WHERE" 句) のインデックスを使用して最適化することしかできませんが、GROUP BY 部分を高速化することはできません。

グループ化が2つのテーブルの列にある場合、GROUP BYにインデックスを使用させる方法はありますか?

4

1 に答える 1

1

まず、両方のテーブルの結合フィールドにインデックスを追加する必要があります。

t1.d, t2.d, t1.e, t2.e

次に、フィールドごとにグループ化するインデックスを追加します

t1.a, t1.b, t2.c

また、HAVING部分には次のように書くべきだと思います:

HAVING count(t1.li) > 0 AND sum(t1.tc) > 4;
于 2013-07-25T07:21:28.077 に答える