当我在大表(160000行)中使用 ORDER BY 时,这样:
select HomeTeam,AwayTeam,FTR,FTHG,FTAG,HS,`AS`,`Date`,Elo1A,Elo1B,Elo2A,Elo2B,Elo3A,Elo3B,Elo4A,Elo4B,nElo1A,nElo1B,nElo2A,
nElo2B,nElo3A,nElo3B,nElo4A,nElo4B from historic
where (HomeTeam='Crystal Palace' or AwayTeam='Crystal Palace') and datediff('1994-08-20',Date)>0 order by `Date` desc limit 1
获取持续时间 1.078秒/0.000秒
当我在没有 ORDER BY 的情况下使用时:
select HomeTeam,AwayTeam,FTR,FTHG,FTAG,HS,`AS`,`Date`,Elo1A,Elo1B,Elo2A,Elo2B,Elo3A,Elo3B,Elo4A,Elo4B,nElo1A,nElo1B,nElo2A,
nElo2B,nElo3A,nElo3B,nElo4A,nElo4B from historic
where (HomeTeam='Crystal Palace' or AwayTeam='Crystal Palace') and datediff('1994-08-20',Date)>0 limit 1
获取持续时间 0.187秒/0.000秒
问题是没有ORDER BY我得错了结果:
Crystal Palace Tranmere 1993-08-14
但正确的是使用ORDER BY:
水晶宫沃特福德1994-05-08
如何避免ORDER BY或以某种方式更智能地调用当前比赛的最后一场比赛?
答案 0 :(得分:0)
根据我们在评论中的对话,您已在日期字段中创建索引并通过它获得性能 -
此外,您可以尝试以下查询,这可能会为您提供更好的效果 -
SELECT HomeTeam,AwayTeam,FTR,FTHG,FTAG,HS,`AS`,`Date`,Elo1A,Elo1B,Elo2A,Elo2B,Elo3A,Elo3B,Elo4A,Elo4B,nElo1A,nElo1B,nElo2A,
nElo2B,nElo3A,nElo3B,nElo4A,nElo4B FROM historic
WHERE (HomeTeam='Crystal Palace' OR AwayTeam='Crystal Palace') and `Date` < '1994-08-20' ORDER BY `Date` DESC LIMIT 1;
注意:这里我只是从日期字段中删除函数,以便它也可以使用索引来过滤数据。