【发布时间】:2013-03-15 22:52:30
【问题描述】:
我有一个 MySQL 查询,我需要尽可能优化(如果可能,加载时间应该低于 5 秒)
查询如下:
SELECT domain_id, COUNT(keyword_id) as total_count
FROM tableName
WHERE keyword_id IN (SELECT DISTINCT keyword_id FROM tableName WHERE domain_id = X)
GROUP BY domain_id
ORDER BY total_count DESC
LIMIT ...
- X 是来自输入的整数
- domain_id 和keyword_id 已编入索引
- 数据库在本地主机上,所以网速应该是最大的
WHERE 子句的子查询最多可以获得 1000 万个结果。另外,对于 MySQL 来说,计算 COUNT 和 ORDER BY 这个计数似乎真的很困难。
我尝试将此查询与 SOLR 混合使用,但没有结果,一次获取如此多的行数给 MySQL 和 SOLR 带来了困难
我正在寻找具有相同结果的解决方案,无论我是否必须使用不同的技术或对此 MySQL 查询进行改进。
谢谢!
查询逻辑是这样的:
我们有一个域,我们正在搜索该域上使用的所有关键字(这是子查询)。然后我们取所有使用第一个查询中找到的至少一个关键字的域,按域分组,每个域使用的关键字数量,我们必须按使用的关键字数量排序 DESC。
我希望这是有道理的
【问题讨论】:
-
为什么需要内部查询,可以在 where 子句中使用 domain_id=x?如果不存在,则在 domain_id 上添加索引
-
@shola 请仔细看查询,是相关数据
-
你能发布解释吗?
-
"来自 WHERE 子句的子查询最多可以获得 1000 万个结果。" - 你有 1000 万个不同的关键字?!?
-
@Vatev 还有很多,但这不是重点...
标签: mysql sql performance solr large-data