我有url_stack
一张桌子urlid
和domainid
一张domain_stack
桌子domainid
和一张桌子domain_count
。
url_stack
有urlid
作为它的主键和一个BTREE
索引domainid
。domain_stack
有domainid
作为它的主要和一个BTREE
索引domain_count
。
我不断地将 url 添加到堆栈中。当从堆栈中弹出一个 url 时,我添加1
到它的domain_count
.
当我弹出一个 url 时,我会保留它的域的计数,这就是为什么有很多域没有任何 url(这就是为什么@moj 答案有问题)。
弹出时,我想url
为每个可用选择一个domain_counts
并将自己限制在前 5 名。
例如,一个常见的结果是:
+------------+------------+--------------+
| urlid | domainid | domain_count |
+------------+------------+--------------+
| 852336945 | -184315873 | 1 |
| 1930023009 | -43391685 | 2 |
| -112137768 | 1607144692 | 4 |
| 1673460622 | 567460239 | 8 |
| 612511843 | 1444323871 | 11 |
+------------+------------+--------------+
5 rows in set (5.37 sec)
通过调用:
SELECT urlid,domain_stack.domainid,domain_stack.domain_count
FROM domain_stack
INNER JOIN url_stack
ON url_stack.domainid = domain_stack.domainid
GROUP BY domain_stack.domain_count LIMIT 5;
问题是这太慢了——每次查询我必须在 0.5 秒以下。我应该如何更改我的查询/我的表以使其更快?
编辑:这是一个描述情况的链接http://sqlfiddle.com/#!2/70ded/1/0