0

このクエリを実行します。

SELECT v.autor, v.titlu,  'http://85.25.176.18/resursecrestine-download' + v.`link` 
FROM  `video_resurse` v, predicimp3 p
WHERE v.titlu = p.titlu
ORDER BY v.autor

大丈夫です。

しかし、「=」を「!=」に置き換えると、非常に時間がかかります...結果の代わりに次のようになります。

#126 - Incorrect key file for table '/tmp/#sql_42c5_0.MYI'; try to repair it 

なんで?

4

1 に答える 1

1

You equal は結合であり、通常はかなり小さなセットを返します。= を != に置き換えると、DB に CROSS JOIN を実行させ、それをフィルタリングして等しいレコードを除外します。

CROSS JOIN を実行するには、DB はおそらく (video_resurse の行数) * (predicimp3 の行数) に等しい合計行数の一時テーブルを作成する必要があります。これらのテーブルのいずれかに多数の行がある場合、一時テーブルは非常に大きくなり、生成に時間がかかる可能性があります。したがって、パフォーマンスが低下します。

表示されているエラーは、/tmp ディレクトリ (mysql がデフォルトで一時テーブルを配置する場所) のスペースが不足していることを示している可能性があり、これがそのエラーの原因となる可能性があります。

于 2010-01-15T22:28:09.610 に答える