在sql查询中,我应该使用什么来代替“减号”操作符以提高性能?

在sql查询中,我应该使用什么来代替“减号”操作符以提高性能?,sql,plsql,Sql,Plsql,我有一个如下的查询,但这是一天比一天慢,因为注册表数据每天都在增加。我也对注册表应用了索引,但这是不够的 (SELECT TRNDT,BATNO,TRNSL,TRNDES,TRNAMT,ORGBRCOD FROM table1 WHERE BRCOD=3555 AND ACTCOD=901 AND ACNO=44190 AND TRNAMT >=0 and orgbrcod<>3555 AND TRNDT> '13-JUL-2017' ) MINUS (SELECT

我有一个如下的查询,但这是一天比一天慢,因为注册表数据每天都在增加。我也对注册表应用了索引,但这是不够的

(SELECT TRNDT,BATNO,TRNSL,TRNDES,TRNAMT,ORGBRCOD 
FROM table1
WHERE BRCOD=3555 AND ACTCOD=901 AND ACNO=44190 AND TRNAMT >=0 and 
orgbrcod<>3555 AND TRNDT> '13-JUL-2017'
)
MINUS
(SELECT T.TRNDT,T.BATNO,T.TRNSL,T.TRNDES,T.TRNAMT,T.ORGBRCOD 
FROM       
  (
     (SELECT TRNDT,BATNO,TRNSL,TRNDES,TRNAMT,ORGBRCOD 
      FROM table1
      WHERE BRCOD=3555 AND ACTCOD=901 AND ACNO=44190 AND TRNAMT >=0 and orgbrcod<>3555 AND TRNDT> '13-JUL-2017'
     )
  ) T,table2 REGISTER
    WHERE T.BATNO=REGISTER.BATNO_CR
    AND T.TRNSL=REGISTER.SL_CR
    AND T.TRNDT=REGISTER.TRNDT
  );

不要用减号。使用丢弃匹配项的外部联接:


这里的诀窍是,丢失的联接在联接表中具有所有空值,而您只需要这些空值。通过将所有联接条件移动到join子句中,可以进行外部ie left联接,因此可以通过要求联接表具有空值来进行过滤。

使用exists代替减号,并查看是否有一些改进。在用减号替换Exists之前,您需要了解Exists的用法。步骤1:查看查询计划并确定最高成本。它可能与减号运算符无关
SELECT a.TRNDT,a.BATNO,a.TRNSL,a.TRNDES,a.TRNAMT,a.ORGBRCOD 
FROM table1 a
WHERE a.BRCOD=3555 AND a.ACTCOD=901 AND a.ACNO=44190 AND a.TRNAMT >=0 and a.orgbrcod<>3555 AND a.TRNDT> '13-JUL-2017'
LEFT JOIN table2 REGISTER
    ON a.BATNO=REGISTER.BATNO_CR
    AND a.TRNSL=REGISTER.SL_CR
    AND a.TRNDT=REGISTER.TRNDT
WHERE REGISTER.BATNO_CR IS NULL