面对SPOOL空间问题时计算行数

时间:2016-11-22 15:46:27

标签: sql performance teradata

SEL COUNT(*) FROM DATABASE_A.QF 

数= 37,011,480

SEL COUNT(*) FROM DATABASE_A_INC.QFA

数= 368,454

查询1

DELETE A
FROM 
    DATABASE_A.QF A,
    DATABASE_A_INC.QFA B
WHERE
    A.Q_NUM = B.Q_NUM
AND
    A.ID = B.ID 
AND 
    A.LOCATION_ID=1;

上面的DELETE查询会遇到SPOOL空间问题。

所以我用另一种形式重写了它。

查询2

DELETE FROM DATABASE_A.QF  A WHERE (Q_NUM,ID) IN 
(SELECT Q_NUM,ID FROM DATABASE_A_INC.QFA B) 
AND LOCATION_ID=1;

处理了368454行。 删除命令完成

我的问题:

  1. 查询1和2在逻辑上是否相同?他们是否删除了相同的记录?
  2. 如何在不进入SPOOL的情况下验证来自查询1的计数 空间问题?我尝试了一般的COUNT功能。我尝试在一定程度上增加假脱机空间。
  3. 有没有更好的方法来检查查询1的计数?

1 个答案:

答案 0 :(得分:0)

查询在逻辑上是相同的,是的。我的猜测是你的SPOOL空间问题的原因是你用逗号列出你的表而不是加入它们。尝试计算查询1,如下所示:

SELECT COUNT(*)
FROM DATABASE_A.QF A
INNER JOIN DATABASE_A_INC.QFA B ON A.Q_NUM = B.Q_NUM
WHERE A.ID = B.ID
AND A.LOCATION_ID=1;