2

遅いクエリに問題があります。テーブルtblVotesについて考えてみます。このテーブルには、VoterGuid、CandidateGuidという 2 つの列があります。有権者が任意の数の候補者に投じた票を保持します。

このテーブルには 300 万を超える行があり、約 13,000 人の異なる有権者が約 270 万の異なる候補者に投票しています。現在、テーブル内の行の総数は 650 万です。

私のクエリが達成しようとしているのは、可能な限り迅速かつ最もキャッシュ効率の高い方法で (SQL Express を使用しています)、受け取った投票数に基づいて上位 1000 人の候補を取得することです。

コードは次のとおりです。

SELECT CandidateGuid, COUNT(*) CountOfVotes
FROM dbo.tblVotes
GROUP BY CandidateGuid
HAVING COUNT(*) > 1
ORDER BY CountOfVotes DESC

...しかし、非常にいっぱいのテーブルがある場合、これをSQL Expressで実行するには非常に長い時間がかかります。

これを高速化し、短時間で実行するための良い方法を提案できる人はいますか? CandidateGuid は個別にインデックスが作成され、CandidateGuid+VoterGuid に複合主キーがあります。

4

3 に答える 3

0

以下のように、having 句の代わりに上位 n を使用してみてください。

SELECT TOP 1000 CandidateGuid, COUNT(*) CountOfVotes
FROM dbo.tblVotes
GROUP BY CandidateGuid
ORDER BY CountOfVotes DESC
于 2013-05-07T15:00:58.673 に答える