【问题标题】:Netezza Get Row Count Of A Big Table Using Meta/System TablesNetezza 使用元/系统表获取大表的行数
【发布时间】: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


    【解决方案1】:

    据我所知,没有任何系统表或视图始终可以保证对包含已删除行的表具有准确的行计数。

    一种折衷的解决方案是从基表创建一个非常薄的物化视图(即单列)。然后,您可以计算 mview 以获得准确的行数,这应该比计算基表快得多。事实上,您可以在基表上使用 count(1),优化器会自动将您重定向到幕后的 mview。

    物化视图的缺点是常见的;您需要支付 IO 成本来保持更新。如果您的桌子足够宽,并且该功能足够有用,那么它很值得。

    【讨论】:

      【解决方案2】:

      注意查询的 _T_OBJECT.OBJCLASS=4905 部分,也可以有具有不同对象类的表。 改用这个,

      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,
      _t_object_classes
      WHERE
      _T_OBJECT.OBJID=_T_CLASS.OID AND _T_OBJECT.OBJCLASS=_t_object_classes.OBJCLASS AND
      _t_object_classes.OBJREFCLASS=4905   -- DISPLAY ONLY TABLES
      AND RELNAME= UPPER('<TABLE NAME>');
      

      【讨论】:

      • 删除“AND RELNAME= UPPER('')”并尝试。我们可以得到所有的表
      【解决方案3】:

      下面给出的是不使用系统表,但可以减少对设备的性能影响。 与其将可能需要很长时间的可能巨大的结果集返回给您的应用程序,不如简单地返回 SQL 将返回的行数。

      试试下面的:

      SELECT
      COUNT(*) AS "# Of Rows Your Query Returned"
      FROM
      (
       SELECT * from TABLE_NAME;
      ) AS "Wrapper";    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 2022-10-31
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多