【发布时间】:2014-10-21 12:04:53
【问题描述】:
我在 Netezza 中有几张大表(数十 TB 的数据)。
我正在尝试找到一种方法来使用系统/元表来计算这些表中的行数。
我知道我可以使用:
SELECT COUNT(*) FROM tablename;
但这很慢,而且会给 Netezza 设备带来很多负载。我需要定期计算这些大表中的行数,因此我不想影响正在运行的其他重要查询的性能。
我找到了这个查询:
SELECT RELNAME TABLE_NAME,
CASE
WHEN RELTUPLES < 0
THEN ((2^32) * RELREFS) + ((2^32) + RELTUPLES )
ELSE ((2^32) * RELREFS) + ( RELTUPLES )
END NUM_ROWS
FROM
_T_CLASS,
_T_OBJECT
WHERE
_T_OBJECT.OBJID=_T_CLASS.OID AND
_T_OBJECT.OBJCLASS=4905 — DISPLAY ONLY TABLES
AND RELNAME = UPPER('<TABLE NAME>');
这几乎可以工作。这个查询的问题是它没有处理可能更新/删除行的事实。
由于 Netezza 将删除的行保留在数据库中,直到进行梳理,我得到了错误的行数。
考虑到已删除的行,是否有一个查询可以为我提供正确的行数?
【问题讨论】:
标签: netezza