2011-02-04 56 views
1
DELETE FROM keywords 
WHERE NOT EXISTS 
(SELECT keywords_relations.k_id FROM keywords_relations WHERE keywords.k_id = keywords_relations.k_id) 

它花費的時間太長......我有583,000個關鍵字(utf_unicode)和100萬個keywords_relations。在過去,查詢過去常常發生在20-60秒,但我現在嘗試運行,並且在半小時內沒有發生。修復mysql查詢

請問您可能會提出什麼問題。此外,此查詢的任何其他替代品。

我想從關鍵字關係表中不存在id的關鍵字中刪除關鍵字。

感謝

該網站是http://domainsoutlook.com/

你可以嘗試去它,也看到,所有的查詢運行緩慢。

PS。大約幾天前服務器崩潰了,我的服務器維護支持在磁盤上執行了fsck檢查或其他操作。

索引關鍵字= k_id(主),關鍵詞(唯一) 指標上keywords_relations = k_id(指數)

+3

什麼是關鍵字和keywords_relations`索引? – FrustratedWithFormsDesigner 2011-02-04 20:50:04

+0

你可以展示你的表格結構嗎? – 2011-02-04 20:57:08

回答

3

試試這個,而不是看它是否有差別:

DELETE keywords 
    FROM keywords 
     LEFT JOIN keywords_relations 
      ON keywords.k_id = keywords_relations.k_id 
    WHERE keywords_relations.k_id IS NULL 
1

WHERE NOT EXISTS (subquery)是已知會導致MySQL < 5.4中的性能問題。使用LEFT JOIN代替

警告:在運行在活動數據庫之前測試它。我對數據丟失不承擔任何責任。

DELETE 
    k 
FROM 
    keywords AS k 
LEFT JOIN 
    keywords_relations AS kr 
USING (k_id) 
WHERE 
    kr.k_id IS NULL 
1

我假設你不想刪除關鍵字,如果有一個或多個屬於它的keyword_relations。因此,您可以做的第一件事是將LIMIT 1添加到您的SELECT-查詢中。

您確定已設置索引k_id,對不對?如果是的話,這實際上不應該是一個MySQL的東西...