优化mysql语句
我有一个大约有1128910行的表,现在我的SQL语句开始运行得非常慢 我的桌子看起来像这样:优化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.
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 TABLEWOU\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不会显示用户在上次上传时的技能是否低于前一次。好的,我会尝试查看。谢谢