我有一个非常大的数据库(800 + Mb转储文件),我导入到我的本地服务器。它来自巫婆的Wordpress数据库我需要提取某些帖子。里面有大约160000个帖子。
目前我正在测试MySql Workbench使用JOIN运行简单查询,这需要很多时间,实际上Workbench停止处理的时间很长。
这是一个例子:
SELECT
COUNT(*)
FROM wp_posts
LEFT JOIN wp_term_relationships
ON wp_posts.ID = wp_term_relationships.object_id
LEFT JOIN wp_term_taxonomy
ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
LEFT JOIN wp_terms
ON wp_term_taxonomy.term_id = wp_terms.term_id
WHERE wp_terms.term_id = 195;
当然,我在SQL上的表现很糟糕,而不是我的领域......
答案 0 :(得分:0)
如果你有用于加入的列的所有索引(wp_posts.ID,wp_term_relationships.object_id等),这应该不是问题,查询应该在不到1秒内执行(1秒很多,太)。
此外,可能还有等待队列(锁)中的其他查询,因此您应该将其添加到这些查询中:
Q
在工作台中创建索引。我在这里可以看到你正在加入每个表上的ID,因为它们是ID列,它们应该是PRIMARY KEY,并在它们上创建UNIQUE Clustered索引。
答案 1 :(得分:0)
如果您真的只是在运行计数,您可以通过以下方式获得结果:
SELECT COUNT(*)
FROM wp_term_relationships wtr
JOIN wp_term_taxonomy wtt
ON wtt.term_taxonomy_id = wtr.term_taxonomy_id
WHERE wtt.term_id = 195;
您不需要附加到这些记录的强制性wp_terms
或wp_posts
记录中的信息。
当您放弃LEFT JOIN
条件NULL
元组时,您也不需要WHERE
。
至于速度,我建议运行EXPLAIN
前面的查询并检查所有内容是否正确索引并且正在使用这些索引。