RowCount存储在Sybase ASE中的表

时间:2015-04-15 13:56:23

标签: sql sybase sybase-ase

Sybase ASE中是否存在存储所有用户表的行数的系统表?我想避免数(*)。我知道在使用sp_help时我们会得到rowcount。所以认为它必须存储在任何系统表中。

4 个答案:

答案 0 :(得分:2)

我没有在Sybase中使用此功能,但Sybase与SQL Server非常相似。仔细阅读documentation,该字段似乎在systabstats.rowcnt中。这将导致类似这样的查询:

select o.name, s.rowcnt
from systabstats s join
     sysobjects o
     on s.id = o.id
where s.indid = 0;

我认为此列是近似值,可能在高事务环境中关闭。

答案 1 :(得分:2)

您不应使用systabstats.rowcnt列:此信息取决于统计信息是否已更新。在针对sysindexes的查询中使用row_count()函数要好得多。与systabstats不同,此信息会自动维护。只有在表上发生插入/删除活动时,此函数返回的结果才会暂时被少量行关闭。

至于MSSQL Server仍然与Sybase ASE类似:外部也是如此。微软已对内部进行了许多更改,因此两个数据库的内容完全不同。统计和存储(我们上面讨论过的)都属于这一类。

答案 2 :(得分:1)

如果您正在运行Sybase之前的15.0,那么

SELECT  o.name, 
        ROWCNT(i.doampg) as ROW_COUNT
    FROM  sysobjects o,
          sysindexes i
    WHERE o.id = i.id
    AND   o.sysstat2 & 1024 = 0         -- not remote
    AND   o.sysstat2 & 2048 = 0         -- not proxy
    AND   (i.indid = 0 OR i.indid = 1)  -- Heap or ClustIdx only
    --AND ROWCNT(i.doampg) > 1000         -- only need for tables having more than 1000 rows
    AND o.type = 'U'                    -- exclude system tables
    ORDER BY o.name

如果您正在运行sybase 15.0及更高版本,则可以使用ROW_COUNT()功能;

SELECT  name, 
        ROW_COUNT(DB_ID(), id)
    FROM  sysobjects
    WHERE type = "U"
    AND   sysstat2 & 1024 = 0  -- not remote
    AND   sysstat2 & 2048 = 0  -- not proxy
    ORDER BY name

答案 3 :(得分:0)

你可以在sysindexes(ase15)中使用systabstats.rowcnt或row_count(i.doampg)