1

aは、5,000,000 レコードとスコアのテーブルです。bは、100,000 レコードと (異なる) スコアのテーブルです。テーブルbにスコアが 1の同じレコードがない限り、テーブルaからすべてのレコードを出力したいと考えています。

私が書いた次のクエリは、実行に 15 時間かかりましたが、まだ実行中です。このようなクエリを実行するのにこれほど時間がかかる可能性はありますか、それとも私のコードに何か問題があるのでしょうか?

SELECT a.c1, a.c2, a.score
INTO OUTFILE 'file.csv'
FROM a
LEFT OUTER JOIN b
ON a.c1=b.c1
AND a.c2=b.c2
WHERE b.score <> 1
4

2 に答える 2

1

クエリは、テーブル b にもあり、スコアが 1 でないすべてのレコードをテーブル a から取得します (そして、これらのレコードは、スコアが 1 以外のテーブル b に表示される回数だけ取得されます)。これは、「同じレコードがテーブル b にスコアが 1 ではない限り、テーブル a のすべてのレコード」とは異なります。

SELECT a.c1, a.c2, a.score
INTO OUTFILE 'file.csv'
FROM a
WHERE NOT EXISTS (
    SELECT 1 FROM b
    WHERE a.c1 = b.c1
    AND a.c2 = b.c2
    AND b.score = 1
)

上記のクエリは、次のインデックスを利用できます

create index my_idx on b(c1,c2,score)
于 2014-09-03T03:54:28.883 に答える