2016-11-22 50 views
0
SEL COUNT(*) FROM DATABASE_A.QF 

计数= 37011480计算行计数面向SPOOL空间问题,当

SEL COUNT(*) FROM DATABASE_A_INC.QFA 

计数= 368454

查询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. 如何验证查询1的计数而不会遇到SPOOL 空间问题?我试过了一个通用的COUNT函数。我试图在一定程度上增加后台打印空间。
  3. 有没有更好的方法来检查查询1的计数?
+0

的可能重复[删除查询性能(http://stackoverflow.com/questions/40626973/delete-query-performance) –

+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; 
+0

我会跑回去。谢谢 ! –

+0

让我知道你找到了什么。还有其他选择! – kbball

+0

您是否删除了行....? – kbball