【问题标题】:Calculate row count when facing SPOOL space issue面临 SPOOL 空间问题时计算行数
【发布时间】:2017-04-06 09:06:34
【问题描述】:
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 行。 DELETE 命令完成

我的问题:

  1. 查询 1 和 2 在逻辑上是否相同?他们是否删除了相同的记录?
  2. 如何在不遇到 SPOOL 的情况下验证查询 1 的计数 空间问题?我尝试了一个通用的 COUNT 函数。我尝试在一定程度上增加 spool 空间。
  3. 有没有更好的方法来检查查询 1 的计数?

【问题讨论】:

标签: sql performance teradata


【解决方案1】:

查询在逻辑上是相同的,是的。我的猜测是您的 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;

【讨论】:

  • 我会跑回去。谢谢!
  • 告诉我你发现了什么。还有其他选择!
  • 我得到Exception criteria exceeded: CPU Time.select count
猜你喜欢
  • 2012-08-31
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多