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万个关键字。在过去,查询曾经在20-60秒内发生,但我现在尝试运行它并且半小时内没有发生。
你能否提出一些可能错误的建议。此外,此查询的任何其他更改。
我正在尝试从关键字关系表中不存在id的关键字表中删除关键字。
由于
该网站为http://domainsoutlook.com/
您可以尝试继续操作,还可以看到所有查询都运行缓慢。
PS。几天前服务器崩溃,我的服务器维护支持在磁盘上执行了fsck检查或其他操作。
关键字的索引= k_id(主要),关键字(唯一) keywords_relations = k_id(index)
的索引答案 0 :(得分: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 :(得分: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
答案 2 :(得分:1)
如果有一个或多个属于它的keyword_relations
,我认为您不想删除关键字。因此,您可以做的第一件事就是在LIMIT 1
- 查询中添加SELECT
。
您确定已为k_id
设置了索引,对吗?如果是的话,这实际上不应该是MySQL的事情......