0

MySQL次のデータを持つテーブルを使用しています。

users(ID, name, email, create_added) (about 10000 rows)
points(user_id, point) (about 15000 rows)

そして私の質問:

SELECT u.*, SUM(p.point) point 
FROM users u 
LEFT JOIN points p ON p.user_id = u.ID 
WHERE u.id > 0 
GROUP BY u.id 
ORDER BY point DESC 
LIMIT 0, 10

最高のポイントを持つ上位 10 人のユーザーのみを取得しますが、その後死亡します。クエリのパフォーマンスを向上させるにはどうすればよいですか?

4

4 に答える 4

2

@Grimが言ったように、INNER JOINの代わりに使用できますLEFT JOIN。ただし、本当に最適化を求める場合は、 tableusersに precalculate を含む追加のフィールドを用意することをお勧めしますpoint。このソリューションは、現在のデータベース設計でのクエリの最適化より優れています。

于 2013-08-23T03:00:28.607 に答える
1

を に交換するLEFT JOINと、INNER JOIN非常に役立ちます。points.pointおよびpoints.user_idが索引付けされていることを確認してください。常に 0 より大きくなるように、WHERE句を取り除くことができると思います(ただし、MySQL はおそらくクエリの最適化段階でこれを行います)。u.id

于 2013-08-23T02:57:12.943 に答える