【问题标题】:Table in which RowCount is stored in Sybase ASE在 Sybase ASE 中存储 RowCount 的表
【发布时间】:2015-04-15 13:56:23
【问题描述】:

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

【问题讨论】:

    标签: sql sybase sap-ase


    【解决方案1】:

    我没有在 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;
    

    我想这个列是一个近似值,在高交易环境中可能会关闭。

    【讨论】:

    • 谢谢戈登! SQL Server 与 Sybase 几乎相似,sybase 也有 systabstats 表,它给了我结果。
    【解决方案2】:

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

    至于 MSSQL Server 仍然与 Sybase ASE 相似:从表面上看确实如此。 Microsoft 对内部进行了许多更改,因此这两个数据库在幕后大不相同。统计数据和存储(我们在上面讨论过)之类的东西属于这一类。

    【讨论】:

      【解决方案3】:

      如果您运行的是 15.0 之前的 SybaseASE,那么

      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
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 该代码是正确的,但对于 ASE12.5 及以下版本,不适用于 ASE 15.0 及以上版本。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多