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