2014-11-03 50 views
1
idx info market po side odd  unique_odd 
10 927606 OU_OT 2.5 under 2.01 927606_OU_2.5_under 
11 927606 OU_OT 2.5 under 2.02 927606_OU_2.5_under 
12 927606 OU_OT 2.5 over 1.81 927606_OU_2.5_over 
13 927776 OU_OT 3.5 under 1.67 927776_OU_3.5_under 
14 927776 OU_OT 3.5 over 2.11 927776_OU_3.5_over 
15 927776 OU_OT 3.5 over 2.31 927776_OU_3.5_over 

odds_etc DATABASE在這裏。FASTest> mysql獲取最後的不同記錄返回所有列

我想輸出像這些。

11 927606 OU_OT 2.5 under 2.02 927606_OU_2.5_under 
12 927606 OU_OT 2.5 over 1.81 927606_OU_2.5_over 
13 927776 OU_OT 3.5 under 1.67 927776_OU_3.5_under 
15 927776 OU_OT 3.5 over 2.31 927776_OU_3.5_over 

這意味着不同的用於unique_odd和MAX(IDX) 它可能以下SQL,但它需要7秒。它太長了,我想要1〜2秒。

SELECT T1.* FROM odds_etc T1 
INNER JOIN (SELECT unique_odd,MAX(idx) as maxidx FROM odds_etc GROUP BY unique_odd) groupT2 
ON T1.unique_odd = groupT2.unique_odd AND T1.idx = groupT2.maxidx 
WHERE info='$info' 

回答

0

隨着odds_etc(unique_odd, idx)索引,下面的查詢可能會有更好的表現:

select oe.* 
from odds_etc oe 
where info = '$info' and 
     not exists (select 1 
        from odds_etc oe2 
        where oe2.unique_odd = oe.unique_odd and 
         oe2.idx > oe.idx 
       ); 

這個短語查詢爲:「給我的所有行unique_oddidx沒有更大的價值。」這是一種更爲複雜的說法:「給我最多idx,每個unique_odd。」但是這個版本可以利用上面的索引,這應該會提高性能。

您可能還需要odds_etc(info, unique_odd, idx)上的索引。

編輯:

出於性能,你需要以下兩個指標:

create index idx_odds_etc_unique_odd_idx on odds_etc(unique_odd, idx); 
create index idx_odds_etc_info_unique_odd_idx on odds_etc(info, unique_odd, idx); 
+0

它的工作原理,但幾乎1分鐘。 – user3734604 2014-11-03 15:03:39

+0

$ sql =「SELECT * \t FROM odds_etc T1 where idx =(SELECT MAX(idx)from odds_etc T2 WHERE T1.unique_odd = T2.unique_odd)」;我也試過了,也需要1分鐘。 – user3734604 2014-11-03 15:13:48

+0

@ user3734604。 。 。那是與兩個索引? – 2014-11-03 15:17:20

相關問題