【发布时间】:2012-07-09 07:54:58
【问题描述】:
我在 PostgreSQL 中有两个表: urls(带有索引页面的表,主机是索引列,3000 万行) 主机(包含主机信息的表,主机是索引列,100 万行)
我的应用程序中最常见的 SELECT 之一是:
SELECT urls.*
FROM urls
JOIN hosts ON urls.host = hosts.host
WHERE urls.projects_id = ?
AND hosts.is_spam IS NULL
ORDER by urls.id DESC, LIMIT ?
在 urls 表中有超过 100 000 行的项目中,查询执行速度非常慢。
由于表已经增长,查询的执行速度越来越慢。我已经阅读了很多关于 NoSQL 数据库(如 MongoDB)的内容,这些数据库旨在处理如此大的表,并且我正在考虑将我的数据移动到 MongoDB。如果我在从 urls 表中选择数据时不必检查主机表,那么一切都会很容易。我听说 MongoDB 不支持连接,所以我的问题是如何解决上述问题?我可以将有关主机的信息放在 urls 集合中,但字段 hosts.is_spam 可以由用户更新,我必须更新整个 urls 集合。我不知道这是正确的解决方案。
如果有任何建议,我将不胜感激。
【问题讨论】:
-
100k 行几乎没有,30M 是正常的数据量,应该不是任何数据库的问题。您能否向我们展示 EXPLAIN ANALYZE 的结果以查看查询计划和时间安排?
标签: mongodb postgresql join database