在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等。我们通常的做法是:select count(*) as c from tableA 。然而对于记录数巨大的表,上述做法将会非常耗时。在DELL 4400 服务器上做试验,MS Sqlserver 2000 数据库对于100万记录的简单数据表执行上述语句,时间在1分钟以上。如果在表的某个字段上做聚簇索引,第一次执行该语句的时间和没有索引的时间差不多,之后执行上述语句,速度很快,在1秒中以内,但当表的记录数发生较大变化后,再执行该语句又会经历一次耗时的过程。而且不是每个表都适合做聚簇索引的,对于数量巨大的表,如果需要经常增删操作,建聚簇索引是一个很不明智的做法,将会极大的影响增删的速度。那么有没有一个比较简单的方法快速获取表的记录总数呢?答案是有的。

在MS SQL 数据库中每个表都在sysindexes 系统表中拥有至少一条记录,该记录中的rows 字段会定时记录表的记录总数。下面是sysindexes 表的相关记录的含义:

列名       数据类型             描述

id            int              表ID(如果

indid = 0 或255)。否则为索引所属表的ID

Indid

smallint          索引ID:

0=表

1=聚簇索引

>1=非聚簇索引

255=具有text或image数据的表条目。

rows

int               基于indid=0 和

indid=1地数据级行数,该值对于

indid>1重复。如果indid=255,rows设置为0。

当表没有聚簇索引时,Indid

= 0 否则为

1。

那么现在大家应该知道如何获取表的记录总数了,只需执行如下语句:

select rows from sysindexes where id = object_id(tablename)

and indid in (0,1)

该方法获取表的记录总数的速度非常快,在毫秒级就可以完成,相比select

count(*) 要快上数万倍。但是大家在运用该方法是一定要注意,该方法得到的表的总记录数不是一个精确值。原因是MS

SQL 并不是实时更新该字段的值,而是定时更新,当然从时间来看该值和精确值一般误差不大。如果你希望快速的粗略估算表的大小,建议你采用该方法。如果你希望得到精确值,那么请在执行上述语句前执行DBCC

UPDATEUSAGE(DatabaseName,[TABLENAME]) WITH ROW_COUNTS 强制更新该字段的值,但这样第一次更新时会耗费大量的时间,这样做的效果和建有聚簇索引的表

select count (*) 效果相差不大,所以如果你希望相对快速地得到精确的表的记录总数,那么你有两种选择,建聚簇索引或者先DBCC

再使用上述方法

如:

Script

select rows from sysindexes where id = object_id('Customer_Company_Info') and indid in (0,1)

example:

select rows from sys.sysindexes where id=OBJECT_ID('[dbo].udt_DebugSendToBaanunit') and indid in (0,1);

select COUNT(*) from [dbo].udt_DebugSendToBaanunit

mysql查询表记录总数sql_SQL Server-快速查询表中的记录总数相关推荐

  1. Mysql数据库中插入记录的命令_向数据库中添加记录的sql命令是什么

    向数据库中添加记录的sql命令是INSERT INTO. (推荐学习:mysql教程) INSERT INTO 语句的语法 INSERT INTO 语句可以有两种编写形式,分别是: 第一种形式 无需指 ...

  2. mysql创建一个表用来快速查询表_mysql数据库的创建表格、查询(多表查询)

    我们要下载Mysql数据库(可以去官网中下),然后在下载一个navicat,我们在这里面使用Mysql.等这些准备工作做完之后,我们就正式来写sql语句了. 首先:我们需要创建一个用户,然后有一个te ...

  3. t–sql pl–sql_SQL Server –在T-SQL中使用最低的度量单位

    t–sql pl–sql A client recently discovered a discrepancy on one of our reports that showed an improve ...

  4. SQL Server 2016 SP1中的新功能和增强功能

    SQL Server 2016 SP1 is released as announced by Microsoft. It comes with a bunch of new features and ...

  5. mysql identity sql_SQL Server中identity(自增)的用法详解

    一.identity的基本用法 1.含义 identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错 2.语法 列名 数据类型 ...

  6. mysql 查询不为0的数据_查询数据库中所有记录总数不为0的数据表名称

    [如何查询postgreSQL 里面某个数据库中所有用户定义的数据表的名字@forandever 2011-11-131.通过命令行查询\d 数据库  -- 得到所有表的名字\d 表名  -- 得到表 ...

  7. MS SQLSERVER中如何快速获取表的记录总数

    (转自:http://www.cnblogs.com/pingkeke/archive/2006/05/29/411995.html) 在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判 ...

  8. mysql profile 调试sql_SQL Server profile使用技巧

    介绍 经常会有人问profile工具该怎么使用?有没有方法获取性能差的sql的问题.自从转mysql我自己也差不多2年没有使用profile,忽然profile变得有点生疏不得不重新熟悉一下.这篇文章 ...

  9. cos66度等于多少度 用计算机怎么算,三角函数值表(三角函数计算方法及快速查询表)...

    三角函数值表(三角函数计算方法及快速查询表) 三角函数的关系 (正弦) Sin = 对边A / 斜边C (余弦) Cos = 邻边B / 斜边C (正切) Tan = 对边A / 邻边B 对边A = ...

  10. mysql查询前20条数据_SQL Server查询前N条记录的常用方法小结

    本文实例讲述了SQL Server查询前N条记录的常用方法.分享给大家供大家参考.具体如下: SQL Server查询前N条记录是我们经常要用到的操作,下面对SQL Server查询前N条记录的方法作 ...

最新文章

  1. bootstrap table 分组_bootstrap-table组合表头的实现方法
  2. mysql 下载地址及安装教程
  3. 用Python画一只蝙蝠
  4. SpringMVC 执行流程解析
  5. Java 算法 超级玛丽
  6. 库克放出拜年视频 来自Apple Park的祝福
  7. 微信扫码登录注册实现
  8. JDK11下载与安装 win10 64位
  9. Servlet原理解析
  10. Web 实现登录记住密码功能
  11. 微型计算机接口技术实训心得,微机原理与接口技术实验总结.doc
  12. 服务器word文档会是只读的,Word自动变只读模式怎么办? 这样可取消Word只读
  13. c1语言学生综合测评,学生综合素质评语
  14. 浅谈虚树(虚仙人掌)
  15. php bcd编码,什么是BCD码、8421码、余三码、格雷码
  16. 关于Vue渐进式框架的理解
  17. linux修改vnc设置密码,更改root与vnc密码,配置vnc
  18. c语言 建立测井数据结构体,给定C语言的数据结构 struct T { int w; union T { char c; int i; dou...
  19. Mac上好用的连接服务器的工具(Termius)
  20. 视频画面滚动字幕怎么做,让你几分钟学会的方法

热门文章

  1. S7-200作MODBUS RTU主站和从站例程教学
  2. 算法导论第三版 第1章习题答案
  3. 手机修改html离线网页内容,HTML5 离线应用之打造零请求、无流量网站的解决方法...
  4. python萌新笔记----基于requests库请求API下载网易云(VIP)音乐
  5. 学习django笔记(天天生鲜)
  6. 5.Django 数据库多表查询
  7. usb uvc协议 1
  8. “2库1平台+N应用”助力智慧机场建设
  9. idea创建svn分支
  10. python汉化之后好用吗_关于Python写的程序汉化心得和所走过的各种坑儿