2016-03-23 49 views
-1

當我使用ORDER BY在大表(160000行)這樣的:如何以更快的速度訂購?

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秒

在i不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.00 0秒

問題是,如果沒有ORDER BY,我得到錯誤的結果:

水晶宮特蘭米爾1993年8月14日

,但正確的是ORDER BY這樣的:

沃特福德水晶宮1994-05-08

如何避免ORDER BY或以某種方式更智能地調用當前比賽的最後一場比賽?

+3

與所有sql性能問題一樣......運行'EXPLAIN'而不是在黑暗中進行刺探。 – PeeHaa

+2

如果表現令人失望,請嘗試支持切爾西。 – Strawberry

+2

嚴重的是,看到正常化。數據庫表格不是電子表格。 – Strawberry

回答

0

根據我們的談話在評論你已經創建的IT-

上日期字段指數和性能得到進一步的你可以試試下面的查詢可提供你更好的性能 -

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; 

注:這裏我只是從日期字段中刪除函數,以便它也可以使用索引來過濾數據。