2

以下を実行するとうまくいきます:

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
)

これは何が原因ですか?

4

2 に答える 2

1

必要な結合ステートメントは次のとおりだと思います。

SELECT email FROM table1
INNER JOIN table2
ON table1.empNum=table2.empNum
AND table2.accomp = 'onhold'
于 2013-03-29T17:47:17.903 に答える
1

あれはどうですか?

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);

いくつかの粗い (しかし決定的な) ベンチマークを実行するには:

  1. mysqlコンソールにログイン
  2. クエリキャッシュをクリアします (*):

    RESET QUERY CACHE;
    
  3. 遅いクエリを実行し、タイミングを書き留めます

  4. 索引を作成する
  5. クエリ キャッシュをクリアする
  6. 遅いクエリを実行し、タイミングを書き留めます
  7. インデックスを落とす
  8. 他のインデックスを作成する
  9. キャッシュをクリアする
  10. 遅いクエリをもう一度実行する
  11. タイミングを比較し、最適なインデックスを維持します (現在のインデックスを削除し、必要に応じて正しいインデックスを作成します)

(*) そのコマンドを実行するには、関連する権限が必要です

于 2013-03-29T17:47:43.567 に答える