2013-01-16 43 views
0

我有一個表名爲鏈接,其中我有50000條記錄,其中三個字段的索引順序爲link_id,org_id,data_id我的SQL查詢非常緩慢,有50K +個記錄

這裏的問題是,當我使用sql查詢組時,它需要更多時間來加載。

查詢是這樣

SELECT DISTINCT `links`.* 
FROM `links` 
WHERE `links`.`org_id` = 2 AND (link !="") 
GROUP BY link 

表是有近20多列

是否有任何解決方案,以加快查詢訪問速度更快。

+2

在SELECT之前添加'EXPLAIN'來查看發生了什麼,以及爲什麼它很慢。 –

回答

3

建立在(org_id, link)

org_id索引來優化您的WHERE條款,並link爲您group by(並且還where一部分)。

通過讓LINK_ID處於第一個位置可能是什麼阻止了您的查詢。

create index LinksByOrgAndLink on Links (Org_ID, Link); 

MySQL Create Index syntax

+0

對不起,我誤以爲它不是link_id。它是現場鏈接。 – Ranzit

+0

你能告訴我如何添加「構建索引(org_id,鏈接)」 – Ranzit

+0

你的意思是多列索引? – Ranzit

0

我猜增加一個索引你的「鏈接」欄將改善的結果。 http://dev.mysql.com/doc/refman/5.0/en/create-index.html

只選擇您需要的列。

爲什麼有一個獨特的links。*? 你的表格中有幾行完全翻倍?

另一方面,將值「」更改爲NULL可以提高您的select語句,但iam不確定這一點。

1

問題是在你的DISTINCT。* 在GROUP BY已經在做的DISTINCT的工作,所以在做不同兩次的SELECT DISTINCT一個和其他的GROUP BY

試試這個

SELECT * 
    FROM `links` 
    WHERE org_id` = 2 AND (link !="") 
    GROUP BY link