0

我想获取不在同一个表的其他列和另外两个表的其他列中的所有索引。
我的查询工作正常。
有没有其他方法可以更快地获得相同的结果?

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 回答