0

クエリに時間がかかる理由を理解しようとしているので、最適化できます。

EXPLAINで試してみました:

EXPLAIN SELECT * FROM (
SELECT p.*, ol. prod_id olpid
FROM products p LEFT JOIN orderlines ol
ON p. prod_id = ol. prod_id ) pol
WHERE pol. olpid IS NULL
ORDER BY category , prod_id;

これをWorkbenchで実行すると、接続のエラーコードが10分(600秒)後に失われます。Indexinを設定した後Prod_ID、クエリは約1秒(完全)で応答します。それ以前は、応答を取得することはほぼ不可能でした。またEXPLAIN PLAN、数秒で実行できます。それでも、インデックスを使用するに、クエリでEXPLAINを使用したいと思います。

ここに何かアイデアはありますか?

4

1 に答える 1

1

ここではサブクエリは必要ありません。代わりに次のクエリを使用してください。

SELECT p.*, ol.prod_id olpid
FROM products p LEFT JOIN orderlines ol
ON p.prod_id = ol.prod_id
WHERE ol.prod_id IS NULL
ORDER BY category, prod_id;

サブクエリを使用しているため、最初のクエリの実行に時間がかかります。サブクエリを完全に実行する必要があります。その後、WHERE条件を適用し、最後にレコードを並べ替えます。これは、EXPLAINを使用したクエリが遅い理由でもあります。

于 2013-03-24T17:56:58.203 に答える