0

同じテーブルの他の列と他の2つのテーブルの他の列にないすべてのインデックスを取得したい。
私のクエリは正常に動作しています。
同じ結果をより速く得る他の方法はありますか?

SELECT Index
        FROM temptable A
        WHERE NOT EXISTS(select 1 
                            from temptable B
                            where A.Index = B.Index2) 
        AND NOT EXISTS (SELECT 1
                            FROM temptable2 B
                            WHERE A.Index = B.INDEX) 
        AND NOT EXISTS (SELECT 1
                            FROM temptable3 B
                            WHERE A.Index = B.INDEX) 
        AND type = 'G';

4

3 に答える 3

0

この例を見てください

存在しない場所を左結合に置き換えると、パフォーマンスが向上します

于 2013-10-09T09:18:46.987 に答える
0

これがデータをより速くフェッチするかどうかはわかりませんが、インデックス列に作成されたインデックスに依存します。インデックス列が主キーの場合INDEX FAST FULL SCAN、一意/非一意のインデックスでもそのような結果が返されます。

 SELECT Index
    FROM temptable A
 WHERE  type = 'G';
 MINUS   
  (select index2 
     from temptable B
    union  
    SELECT index
    FROM temptable2 B
    union
    SELECT index
    FROM temptable3 B
   ) ;
于 2013-10-09T09:23:44.357 に答える
0

これを試すことができます:リソースがないため、テストしていません

SELECT
      TABLE1.INDEX
FROM
          (SELECT INDEX FROM TEMPTABLE WHERE TYPE = 'G') TABLE1
      LEFT OUTER JOIN TEMPTABLE TT1 ON TABLE1.INDEX = TT1.INDEX2
      LEFT OUTER JOIN TEMPTABLE2 TT2 ON TABLE1.INDEX = TT2.INDEX
      LEFT OUTER JOIN TEMPTABLE3 TT3 ON TABLE1.INDEX = TT3.INDEX
WHERE
      TT2.COLUMNB IS NULL;

Add indexes on the `columns TEMPTABLE.INDEX, TEMPTABLE.INDEX2, TEMPTABLE2.INDEX, TEMPTABLE3.INDEX`
于 2013-10-09T09:25:42.787 に答える