我有一个大约1 128 910行的表,现在我的SQL语句开始运行得很慢。
我的表格如下:
SU_Id SU_User SU_Skill SU_Value SU_Date
int(10) int(10) int(10) float int(10)
1 1 23 45.34 1300978612
2 1 23 48.51 1300978865
3 1 23 47.21 1300979203
4 3 23 61.01 1300979245
5 2 23 38.93 1300979412
6 1 17 12.76 1300979712
7 2 23 65.30 1300979998
如在SU_Skill中所见,用户可以拥有多个具有相同技能编号的条目。 SU_Value保持技能的值,它可以上下。 SU_Date保存添加值的日期。
我想要一个SQL语句,用于选择技能的20个当前最高值。以下SQL语句是我今天使用的,但它很慢,我认为有更好的方法。
SELECT DISTINCT SU_User AS Player,
(SELECT SU_Value FROM WOU__SkillUploads WHERE SU_User = Player AND SU_Skill = 23 ORDER BY SU_Date DESC LIMIT 1) AS Value
FROM WOU__SkillUploads
WHERE SU_Skill = 23
ORDER BY Value DESC LIMIT 20
有更快的方法吗?感谢您阅读我的问题!
答案 0 :(得分:1)
子选择非常慢,特别是在你使用它的方式。
将其重写为JOIN。在这种情况下,因为你想要来自SkillUploads的所有记录,其中SU_SKILL = 23,这应该是一个正确的连接。
答案 1 :(得分:1)
同一个用户可以多次进入结果吗?这可能适合你。
SELECT SU_USER, MAX(SU_VALUE)
FROM WOU_SKILLUploads
WHERE SU_SKILL=23
GROUP BY SU_USER
ORDER BY MAX(SU_VALUE) DESC
LIMIT 20