2016-10-05 6 views
0

私はトラフィック統計を記録するはずの2つのテーブルを持っています。最初は訪問者情報を含み、2つ目は訪問されたページを含みます。大規模なDBに制限のないGROUP BY

次に、訪問数でソートされたブラウザーのリストを取得すると思われるこのクエリがあります。

SELECT tu.browser, COUNT(tp.id) AS count FROM t_users tu 
    LEFT JOIN t_pages tp ON tu.id = tp.id GROUP BY tu.browser 

これらのテーブルに何百万ものレコードがある場合でも、このクエリが効率的であるかどうかは疑問でした。

クエリに使用するすべての列にインデックスがあることに注意してください。

+0

クエリで 'EXPLAIN'を実行しようとしましたか?インデックスが適切に設定されていれば、私の推測では、クエリがかなり高速になるということです。 –

+0

EXPLAIN QUERY PLANは、1つの「索引を使用したスキャン」と2つの「索引を使用した検索」を示しています。それはいいですか? – katie

答えて

1

このクエリがハードウェア上のデータで高速に実行されるかどうかを確認するには、自分で測定する必要があります。

とにかく、このクエリはすでにかなり効率的です。 インデックスはt_pages.idに参加できます。GROUP BYは、インデックスのエントリをt_users.browserに順番にスキャンすることで非常に効率的です。 t_users.idrowidではない場合、つまりINTEGER PRIMARY KEYとして宣言されていない場合は、インデックスエントリからそれを検索するには実際のテーブルに移動する必要があります。 browserフィールドとidフィールドの両方を含むcovering indexを追加することで、この手順を削除できます。

関連する問題