との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