2016-12-31 14 views
0

"IN"制限を使用して多数の値を持つことの短所は何ですか?単一クエリVS複数クエリ:実行時間とリソースの使用

SELECT count(*), mail 
FROM event, contacts 
WHERE event.contactid = contacts.id 
AND event_type = 1 
AND mail IN (@1, @2, @3, etc.) 
GROUP BY mail; 

また、これらのクエリを複数の並列クエリに分割する方がよいと思いますか?最初のソリューションと比較して、リソース使用率や実行時間などの面でどのような影響がありますか?事前に

おかげ

答えて

4

FROM句で決して使用コンマ。 常には、適切で明示的なJOIN構文を使用します。

あなたの列名を修飾し、表の別名を使用します。

SELECT count(*), c.mail -- I am guessing `mail` comes from `contacts` 
FROM event e JOIN 
    contacts c 
    ON e.contactid = c.id 
WHERE e.event_type = 1 AND 
     c.mail IN (@1, @2, @3, etc.) 
GROUP BY c.mail; 

INリストを有することに何の欠点はありません(まあ、その理由の中に - いくつかの点では、クエリの長​​さ制限をヒットする場合があります)。実際には、INのリストに定数を使用すると、MySQLの最適化がうまくいきます。リストをソートし、値をバイナリ検索します。

つまり、リストが別のテーブル/クエリから来ている場合は、それらを定数として入れないでください。代わりに、このクエリにテーブル/クエリを組み込む必要があります。

関連する問題