以下を実行するとうまくいきます:
SELECT email FROM User WHERE empNum IN (126,513,74)
ただし、これを使用すると、応答に非常に時間がかかります (エラーなし)。
SELECT email FROM table1 WHERE empNum IN (
SELECT empNum FROM table2 WHERE accomp = 'onhold' GROUP BY empNum
)
これは何が原因ですか?
以下を実行するとうまくいきます:
SELECT email FROM User WHERE empNum IN (126,513,74)
ただし、これを使用すると、応答に非常に時間がかかります (エラーなし)。
SELECT email FROM table1 WHERE empNum IN (
SELECT empNum FROM table2 WHERE accomp = 'onhold' GROUP BY empNum
)
これは何が原因ですか?
必要な結合ステートメントは次のとおりだと思います。
SELECT email FROM table1
INNER JOIN table2
ON table1.empNum=table2.empNum
AND table2.accomp = 'onhold'
あれはどうですか?
SELECT DISTINCT table1.email
FROM table1
INNER JOIN table2 USING(empNum)
WHERE table2.accomp = 'onhold'
table2.accomp
そのクエリを頻繁に使用する場合は、おそらくインデックスを作成する必要があります。
CREATE INDEX accomp ON table2 (accomp);
または多分
CREATE INDEX accomp ON table2 (empNum,accomp);
いくつかの粗い (しかし決定的な) ベンチマークを実行するには:
クエリキャッシュをクリアします (*):
RESET QUERY CACHE;
遅いクエリを実行し、タイミングを書き留めます
(*) そのコマンドを実行するには、関連する権限が必要です