zoukankan      html  css  js  c++  java
  • 查找数据库中记录数大于N的表


    在CSDN的帖子中有人问过这个问题,这里做个解答。

    直观上查询所有用户表,获取count即可,但是这样很糟糕。

       declare @N int   set @N=10000
       --通过查询索引表的聚集索引查询  (indid=1,这种是体现数据是以聚集索引方式存储体现的查询)
       select object_name(id),rowcnt from sysindexes where rowcnt>=@N and indid=1 and objectproperty(id,'isusertable')=1
       --通过查询索引表的无聚集索引查询   (indid=0,这种是体现数据是以数据堆方式存储体现的查询,无聚集索引的表)
       select object_name(id),rowcnt from sysindexes where rowcnt>=@N and indid=0 and objectproperty(id,'isusertable')=1
     
      有人问indid是什么意思,
      一张具有实际应用意义的表,都应该有个聚集索引(个人觉得无聚集索引的表意义不大,呵呵,如果实在都要查就
      select object_name(id),rowcnt from sysindexes where rowcnt>=@N and indid<=1 and objectproperty(id,'isusertable')=1 即可),非聚集索引则不一定
      必须。
        indid=1 查询的就是根据聚集索引键值来查询sysindexs,也就是说不存在聚集索引的表,通过上面的查询是查不出来的。
       而indid>1(如indid=2、indid=3等) 则代表查询的是根据非聚集索引序号,但没有聚集索引的表还是大量存在的(这不比
    聚集索引)

       当然此查询可能有误差,在索引碎片的产生和清理过程确实会存在,只要索引定期维护、重建,那么误差应该不大,甚至不存在误差了


    sysindexes详细内容

    数据库中的每个索引和表在表中各占一行。该表存储在每个数据库中。

    列名 数据类型 描述
    id int 表 ID(如果 indid = 0 或 255)。否则为索引所属表的 ID。
    status int 内部系统状态信息。
    first binary(6) 指向第一页或根页的指针。
    indid smallint

    索引 ID:

    1 = 聚集索引
    >1 = 非聚集
    255 = 具有 text image 数据的表条目

    root binary(6) 如果 indid >= 1 和 < 255,root 是指向根页的指针。如果 indid = 0 或 indid = 255,root 是指向最后一页的指针。
    minlen smallint 最小行大小。
    keycnt smallint 键的数目。
    groupid smallint 在其上创建对象的文件组 ID。
    dpages int 如果 indid = 0 或 indid = 1,dpages 是已用数据页的计数。如果 indid = 255,其设置为 0。否则是已用索引页的计数。
    reserved int 如果 indid = 0 或 indid = 1,reserved 是分配给所有索引和表数据的页计数。如果 indid = 255,reserved 是分配给 textimage 数据的页计数。否则是分配给索引的页计数。
    used int 如果 indid = 0 或 indid = 1,used 是用于所有索引和表数据的总页数。如果 indid = 255,used 是用于 textimage 数据的页计数。否则是用于索引的页计数。
    rowcnt bigint 基于 indid = 0 和 indid = 1 的数据级行计数。如果 indid = 255,rowcnt 设置为 0。
    rowmodctr int 对自上次更新表的统计后插入、删除或更新行的总数进行计数。
    xmaxlen smallint 最大行大小。
    maxirow smallint 最大非叶索引行大小。
    OrigFillFactor tinyint 创建索引时使用的起始填充因子值。不保留该值;然而,如果需要重新创建索引但记不住当初使用的填充因子,则该值可能很有帮助。
    reserved1 tinyint 保留。
    reserved2 int 保留。
    FirstIAM binary(6) 保留。
    impid smallint 保留。索引实现标志。
    lockflags smallint 用于约束经过考虑的索引锁粒度。例如,对于本质上是只读的查找表,可以将其设置为仅进行表级锁定以使锁定成本减到最小。
    pgmodctr int 保留。
    keys varbinary(816) 组成索引键的列 ID 列表。
    name sysname 表名(如果 indid = 0 或 255)。否则为索引的名称。
    statblob image 统计 BLOB。
    maxlen int 保留。
    rows int 基于 indid = 0 和 indid = 1的数据级行数,该值对于 indid >1 重复。如果 indid = 255,rows 设置为 0。提供该列是为了向后兼容。

     

  • 相关阅读:
    1442. Count Triplets That Can Form Two Arrays of Equal XOR
    1441. Build an Array With Stack Operations
    312. Burst Balloons
    367. Valid Perfect Square
    307. Range Sum Query
    1232. Check If It Is a Straight Line
    993. Cousins in Binary Tree
    1436. Destination City
    476. Number Complement
    383. Ransom Note
  • 原文地址:https://www.cnblogs.com/piaoqingsong/p/740174.html
Copyright © 2011-2022 走看看