私は、appname、uid、ratingの3つのカラムを持つテーブルを持っています。 各アプリ名の平均評価をすばやく取得する必要があります。これは私のコードです:平均でグループを一時的に使用することを避ける
SELECT
t1.appname as applicationName,
Avg(t1.rating) as averageRating
FROM
`user_ratings` t1
GRO
t1.appname
問題は、これは数秒かかり、および/ tmpがいっぱいになる(私はこれについて何もできない、私はまた「できればしても失敗する可能性があります私の埋め込まれたサーバー上にあり、 t my.cfgを編集します)。だから、私は一時的なものを使わずにこれをしたい。ここで
が期待通りにTMPが使用されていることを示す、EXPLAINの出力です:
1 SIMPLE t1 ALL 6399 Using temporary; Using filesort
平均がなければ、クエリは瞬時に完了し、これはEXPLAIN生成:
1 SIMPLE t1 index appname 452 6399 Using index
完璧に動作します、ありがとう。私は索引をカバーすることについて読まなければならない。 – Klocman
私のクイックディスカッション:http://mysql.rjweb.org/doc.php/index1さらに長い "cookbook":http://mysql.rjweb.org/doc.php/index_cookbook_mysql –