1

通常、返されるのに約 10 秒もかからない比較的単純なクエリがあります。それは次のとおりです。

SELECT personid 
FROM vw_has_copyright 
WHERE (Orderid IN (SELECT orderid 
                   FROM orders WHERE eventid = 1234)) 
GROUP BY personid 
ORDER BY personid

このクエリを実行すると、ハングするだけです。実行するselect orders.orderid from orders where orders.eventid = 1234と、このクエリから生成されたリストを使用して、正常に動作しますselect personid from vw_has_copyright where Orderid in (*my list here...*)

では、ネストされた選択クエリで機能しなくなったのはなぜですか? とても奇妙に思えますが、デバッグする方法がわかりませんか? 前もって感謝します!!

- -編集 - -

恥ずかしいことに、インデックスを適切に管理していないことが問題でした。注文テーブルのインデックスが断片化されているため、クエリが突然機能しなくなりましたが、再構築して再編成すると、クエリが再び機能するようになりました。話の教訓 - あなたのデータベースを大事にしてください!!

4

3 に答える 3

1

INこれは非常にトリッキーで、通常は大量のレコードを持つオーダー テーブルでは特に注意が必要です。EXISTS または通常の結合に変更することをお勧めします。

これら3つのオペランドの違いを説明する非常に良いリンクがあります

于 2012-05-09T09:47:38.443 に答える
0

このようなものを試してください

SELECT CopyRight.personid 
FROM vw_has_copyright CopyRight
     Inner Join orders order on order.orderid = CopyRight.Orderid
WHERE  order.eventid = 1234
GROUP BY CopyRight.personid 
ORDER BY CopyRight.personid
于 2012-05-09T09:50:17.317 に答える