2

この非常に単純なクエリには多くの時間がかかります。

SELECT text, url, docid 
FROM retrieve 
LEFT JOIN citations2 
ON citations2.fromdoc = retrieve.docid 
WHERE citations2.todoc IS NULL 
LIMIT 10;

NULL 条件の左結合があります...それが原因でしょうか? 随所にインデックスを配置しています。

低速クエリ ログは次のとおりです。

# Time: 130404  8:00:31
# User@Host: em[em] @ zebra [130.239.162.142]
# Query_time: 27.006579  Lock_time: 0.000019 Rows_sent: 0  Rows_examined: 90682
use em_bg04;
SET timestamp=1365055231;
SELECT text, url, docid FROM retrieve LEFT JOIN citations2 ON citations2.fromdoc =   retrieve.docid WHERE citations2.todoc IS NULL LIMIT 10;

関連するテーブルとサイズの概略図を次に示します (下にスクロールし続けEXPLAINて、クエリの出力を確認してください) 。

表の引用2

テーブル検索

EXPLAIN の出力は次のとおりです。

ここに画像の説明を入力

だから、それはテーブル全体を通過しなければならないようです... .もちろんこれを読みましたが、意味がわかりません。では、このクエリを高速化する方法はありますか?

4

2 に答える 2

2

このクエリを試してください

あなたは短絡を利用しているので、最初の条件が偽になると、2番目の条件をチェックすることはできません..

それが役に立てば幸い...

SELECT 
   text, 
   url, 
   docid 
FROM  
   retrieve 
LEFT JOIN 
   citations2 
ON 
   citations2.todoc IS NULL AND 
   citations2.fromdoc = retrieve.docid 
LIMIT 10;
于 2013-04-04T09:30:39.043 に答える
1

Meherzads クエリは有望に見えます。しかし、私は彼のクエリを新しく作成されたインデックスと組み合わせて使用​​します

IDX_FROMDOC_TODOC両方の列が含まれています。

于 2013-04-04T09:40:00.993 に答える