2011-02-14 49 views
3

我有以下SQL:租期,提高DISTINCT/LIMIT MySQL查詢的分頁

SELECT group_id FROM products WHERE category = 12345 GROUP BY group_id LIMIT 0, 10 

或:

SELECT DISTINCT group_id FROM products WHERE category = 12345 LIMIT 0, 10 

限制是用於分頁。我想知道如何避免MySQL查找所有行,直到找到我想要的10個不同的group_ids。例如,如果我做:

SELECT DISTINCT group_id FROM products WHERE category = 12345 LIMIT 200, 10 

它會掃描前200行與類別= 12345,比啓動然後收集10個不同group_ids?

UPDATE:如果我在(group_id,category)上創建了一個索引,該怎麼辦?

+0

是否有GROUP_ID的指數?這肯定會加快對不同值的查找。我不確定你想要做什麼 - 你想從10個選擇中選擇不同的值,還是從不同的結果集中選擇10個值? – Patrick 2011-02-14 23:42:58

回答

1

您的查詢會查找前200個不同的行,然後輸出下10個。DISTINCTLIMIT之前完成。根據索引和表格的存儲方式,一旦滿足限制條款,就可以停止收集唯一值。如果你想要清晰的值被索引,這很有可能。

(順便說一句,你會如果你使用LIMIT 10 OFFSET 200來代替舊的直觀LIMIT 200, 10符號提高查詢的可讀性。)