mysql查询表记录总数sql_SQL Server-快速查询表中的记录总数
在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等。我们通常的做法是: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-快速查询表中的记录总数相关推荐
- Mysql数据库中插入记录的命令_向数据库中添加记录的sql命令是什么
向数据库中添加记录的sql命令是INSERT INTO. (推荐学习:mysql教程) INSERT INTO 语句的语法 INSERT INTO 语句可以有两种编写形式,分别是: 第一种形式 无需指 ...
- mysql创建一个表用来快速查询表_mysql数据库的创建表格、查询(多表查询)
我们要下载Mysql数据库(可以去官网中下),然后在下载一个navicat,我们在这里面使用Mysql.等这些准备工作做完之后,我们就正式来写sql语句了. 首先:我们需要创建一个用户,然后有一个te ...
- 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 ...
- SQL Server 2016 SP1中的新功能和增强功能
SQL Server 2016 SP1 is released as announced by Microsoft. It comes with a bunch of new features and ...
- mysql identity sql_SQL Server中identity(自增)的用法详解
一.identity的基本用法 1.含义 identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错 2.语法 列名 数据类型 ...
- mysql 查询不为0的数据_查询数据库中所有记录总数不为0的数据表名称
[如何查询postgreSQL 里面某个数据库中所有用户定义的数据表的名字@forandever 2011-11-131.通过命令行查询\d 数据库 -- 得到所有表的名字\d 表名 -- 得到表 ...
- MS SQLSERVER中如何快速获取表的记录总数
(转自:http://www.cnblogs.com/pingkeke/archive/2006/05/29/411995.html) 在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判 ...
- mysql profile 调试sql_SQL Server profile使用技巧
介绍 经常会有人问profile工具该怎么使用?有没有方法获取性能差的sql的问题.自从转mysql我自己也差不多2年没有使用profile,忽然profile变得有点生疏不得不重新熟悉一下.这篇文章 ...
- cos66度等于多少度 用计算机怎么算,三角函数值表(三角函数计算方法及快速查询表)...
三角函数值表(三角函数计算方法及快速查询表) 三角函数的关系 (正弦) Sin = 对边A / 斜边C (余弦) Cos = 邻边B / 斜边C (正切) Tan = 对边A / 邻边B 对边A = ...
- mysql查询前20条数据_SQL Server查询前N条记录的常用方法小结
本文实例讲述了SQL Server查询前N条记录的常用方法.分享给大家供大家参考.具体如下: SQL Server查询前N条记录是我们经常要用到的操作,下面对SQL Server查询前N条记录的方法作 ...
最新文章
- bootstrap table 分组_bootstrap-table组合表头的实现方法
- mysql 下载地址及安装教程
- 用Python画一只蝙蝠
- SpringMVC 执行流程解析
- Java 算法 超级玛丽
- 库克放出拜年视频 来自Apple Park的祝福
- 微信扫码登录注册实现
- JDK11下载与安装 win10 64位
- Servlet原理解析
- Web 实现登录记住密码功能
- 微型计算机接口技术实训心得,微机原理与接口技术实验总结.doc
- 服务器word文档会是只读的,Word自动变只读模式怎么办? 这样可取消Word只读
- c1语言学生综合测评,学生综合素质评语
- 浅谈虚树(虚仙人掌)
- php bcd编码,什么是BCD码、8421码、余三码、格雷码
- 关于Vue渐进式框架的理解
- linux修改vnc设置密码,更改root与vnc密码,配置vnc
- c语言 建立测井数据结构体,给定C语言的数据结构 struct T { int w; union T { char c; int i; dou...
- Mac上好用的连接服务器的工具(Termius)
- 视频画面滚动字幕怎么做,让你几分钟学会的方法
热门文章
- S7-200作MODBUS RTU主站和从站例程教学
- 算法导论第三版 第1章习题答案
- 手机修改html离线网页内容,HTML5 离线应用之打造零请求、无流量网站的解决方法...
- python萌新笔记----基于requests库请求API下载网易云(VIP)音乐
- 学习django笔记(天天生鲜)
- 5.Django 数据库多表查询
- usb uvc协议 1
- “2库1平台+N应用”助力智慧机场建设
- idea创建svn分支
- python汉化之后好用吗_关于Python写的程序汉化心得和所走过的各种坑儿