私は、次の列を含むテーブルを持っている:次のSQLリクエストをより速く実行する方法はありますか?
id, name, domain, added, is_verified
1, "First Google", "google.com", DATE(), 1
2, "Second Google", "google.com", DATE(), 1
3, "Third Google", "google.com", DATE(), 1
4, "First disney", "disney.com", DATE(), 1
5, "Second disney", "disney.com", DATE(), 1
6, "Third disney", "disney.com", DATE(), 0
7, "First example", "example.com", DATE(), 0
8, "Second example", "example.com", DATE(), 0
そして、次のリクエスト:
SELECT domain FROM mytable WHERE domain NOT IN
(SELECT domain FROM mytable WHERE is_verified = 1 GROUP BY domain)
GROUP BY domain ORDER BY added DESC;
この要求の背後にある主要なアイデアはis_verified
を持っていないすべてのdomain
を得ることです本当に。
上記の例では、「example.com」は1回だけ返されます。
リクエストは正常ですが、実行に時間がかかります(私は何千ものエントリがあります)。この要求を行うための他の方法が、より高速かつ効率的になるのでしょうか?
パフォーマンスの問題がEXPLAIN含めるべきでは分析して、テーブルのサイズ、インデックス、現在の時刻に関する情報パフォーマンス、欲求時間などが含まれます。遅いというのは相対的な用語であり、比較するには実際の値が必要です。また、[How-to-Ask](http://stackoverflow.com/help/how-to-ask)をお読みください。 – e4c5
私の目では、複数の行が1つの論理エンティティにまたがっているため、テーブルが正しく正規化されていません。ドメイン)。また、最新の 'added'エントリカウントだけ、または' is_verified = 1'を持つ行があればドメインを検証しますか? – Smutje