2013-01-16 61 views
0

我想選擇N從表最後一個唯一的關鍵詞,它具有以下結構:SQL查詢加速

id | keyword | digit 
1 | TEXT1 | 123 
2 | TEXT2 | 125 
... 
3 | TEXT3 | 123 

與查詢:

SELECT id, keyword FROM table 
WHERE digit = 123 
AND id IN 
(SELECT MAX(id) FROM table GROUP by keyword) 
ORDER BY id DESC LIMIT 10 

時限制爲10 - 20,它少於一秒鐘,但是如果限制從50開始 - 查詢時間從3秒開始並且更多。

子選擇是邪惡的。我是否可以加快這種查詢?

+0

你有什麼指標在你的桌子上。 'explain'的輸出是什麼? – datasage

回答

3

試試這個

SELECT MAX(id) max, keyword FROM table 
    WHERE digit = 123 
    GROUP BY keyword 
    ORDER BY max DESC LIMIT 10 
+2

我會使用'GROUP BY',或者集合函數'MAX()'不起作用... –

+0

已更新我的答案,group by應該做這項工作,當id被訂購時DESC,那麼您將得到最大的 –

+0

不是真的,它會根據找到的'id'的第一個條目進行排序...您將不得不使用MAX()函數。 [請參閱SQL小提琴](http://www.sqlfiddle.com/#!2/fb157/1/0) –

1

試試這個

SELECT MAX(id) as id, keyword FROM table 
    WHERE digit = 123 
    GROUP BY keyword 
    ORDER BY id DESC LIMIT 10 

問候。