优化mysql语句

优化mysql语句,mysql,Mysql,我有一个大约有1128910行的表,现在我的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.

我有一个大约有1128910行的表,现在我的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_值保持技能的价值,它可以上下浮动。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

有没有更快的办法?谢谢你阅读我的问题

子选择非常慢,尤其是在使用该选项的方式上


将此重写为联接。在这种情况下,因为您希望所有记录都来自SU_SKILL=23的SkillUploads,所以这可能是一个正确的连接

同一用户可以多次出现在结果中吗?这可能对你有用

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

您需要发布
EXPLAIN
语句的输出,您需要发布
SHOW CREATE TABLE
,如果可能,还需要发布
SHOW VARIABLES
输出以及您正在使用的硬件。此外,还需要指定慢速的含义。一秒钟?10秒?5分钟?EXPLAIN的输出是:id select_type table type mable_keys key_len ref rows Extra 1 PRIMARY WOU_uskill使用where上载所有NULL 1128910;使用临时设备;使用filesort 2依赖子查询WOU_uskill使用where上传所有NULL 1128910;使用filesortSHOW CREATE TABLE是:CREATE TABLE
WOU\u Skill上传
SU\u Id
int(10)NOT NULL自动递增,
SU\u User
int(10)NOT NULL,
SU\u Skill
int(10)NOT NULL,
SU\u Value
float NOT NULL,
SU Date
int(10)NOT NULL,主键(
SU\u Id
)ENGINE=MyISAM AUTO_INCREMENT=1131789默认字符集=utf8No,每个用户只能显示一次。此SQL不会显示用户在上次上传时的技能是否低于前一次。好的,我会尝试查看。谢谢