2016-11-14 7 views
1
delete from VA_demo_setup_NCSC_temp 
    where exists 
    (select * 
    from VA_demo_setup_enrolled va 
    where VA_demo_setup_NCSC_temp.student_id = va.student_id 
     and VA_demo_setup_NCSC_temp.academic_period = va.academic_period); 

私はこれに似たような記事をいくつか見てきましたが、この特定のクエリに時間がかかる理由を解読できませんでした。私はidとピリオドが両方のデータセットにあるレコードを削除しようとしています。削除する場所

+1

どのDBMSを使用していますか? –

+0

使用しているdbmsにタグを付けます。表定義を追加する、索引を追加する。また、いくつかのサンプル・テーブル・データと期待される結果を追加してください。 (よく書式設定されたテキスト!) – jarlh

+0

あなたの検索フィールド(idとacademic_period)に索引を付けましたか? –

答えて

2

私たちがあなたのテーブル構造とインデックスを見れば、パフォーマンスが悪いと説明するのは簡単です。しかし、あなたの質問は以下のように書き直すことができます。この方法でパフォーマンスが向上する場合があります。これは、必要な方法でデータを削除するための標準的な方法です。

DELETE   vt 
FROM   VA_demo_setup_NCSC_temp vt 
    INNER JOIN VA_demo_setup_enrolled va ON vt.student_id = va.student_id AND vt.academic_period = va.academic_period; 

おそらくあなたは、UNIQUEIDENTIFIERで構成VA_demo_setup_NCSC_temp表に主キーがありますか? (この場合、書き換えられたクエリはパフォーマンスを変更しません)

+1

おそらく、すべてのRDBMSがこのようにクエリを書くことをサポートしているとは限りません。 –

+0

@ Clockwork-Museええ、私はここでSQL Serverを想定していますが、より多くの情報を待っています。興味のない - どのデータベース管理システムでこの構文が許可されていないのですか? – Drammy

+0

削除* \t VA_demo_setup_NCSC_temp e \tここで、mergedIdは(選択したmergedIdをVA_demo_setup_enrolledから)選択します。 – David

関連する問題