在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等。我们通常的做法是: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 再使用上述方法
如:
select rows from sysindexes where id = object_id('Customer_Company_Info') and indid in (0,1)
分享到:
相关推荐
本文将基于提供的示例代码,深入探讨Oracle中用于快速查询和更新大数据的一些关键技术点。 #### 一、批量处理技术:`BULK COLLECT` 批量处理是提高数据处理效率的重要手段之一。通过一次性获取多条记录,可以显著...
1. **分批处理**:避免一次性加载所有数据到内存中,而是采用分批次的方式进行查询和处理。 2. **合理设置查询参数**:例如设置`setFetchSize`来控制每次获取的数据量,减少内存压力。 3. **结果集的优化**:使用...
为了提高查询表记录总数的效率,可以利用SQL Server中的系统表sysindexes。sysindexes表中记录了数据库中每个表和索引的基本信息,包括表的记录总数。系统表sysindexes中的rows字段会定时记录表的记录总数,因此可以...
在本实验中,我们将深入探讨SQL Server数据库中的数据查询与更新,特别是针对复杂单表查询的技巧。实验的目的是帮助用户熟练掌握SELECT查询语句中的关键元素,包括Group by子句、Having子句以及各种汇总函数,如MAX...
Redis的这些数据结构设计考虑了内存效率、查询速度和数据操作的便利性。压缩列表和散列表等自定义数据结构是Redis能够高效运作的关键。在实际应用中,Redis广泛用于缓存、消息队列、计数器等多种场景,其高性能和...
### PGSQL统计一个数据库所有数据库空字段的函数 在PostgreSQL(简称PGSQL)中,有时...通过以上步骤,我们可以在PGSQL中有效地统计所有表中的空字段数量,并将结果展示在一个临时表中,方便进一步的数据分析和处理。
多表关联是指在一个查询中关联多个表,以便从多个表中提取数据。这在实际开发中非常常见,例如,我们需要从多个表中提取数据以展示在一个网页上。在 Linq to sql 中,我们可以使用 join 关键字来实现多表关联。例如...
### 数据结构与算法课程设计——航班查询系统 #### 一、概述 本次课程设计的核心目标是通过对航班信息查询系统的开发,加深对数据结构与算法的理解和应用能力。系统设计主要涉及的技术点包括二分查找、基数排序...
DataFrame在Spark中代表的是一个分布式的、带结构的数据集,它可以被看作是表格或者数据库中的表,而DataFrame API则提供了丰富的操作方法,如选择、过滤、聚合等。 在项目中,"scalaDemo"可能是包含主要代码的...
无限上级、无限下级查询的优点是可以快速查询出所有的上级和下级信息,且可以应用于多种树形结构的数据模型中,如组织架构、社交网络、论坛等。 在实际应用中,无限上级、无限下级查询可以用于实现树形结构的数据...
在 MySQL 中,当单表中的数据达到千万级别时,数据的分页查询结果时间可能会变得很长。为解决这个问题,我们需要采取相应的优化措施,以达到最短的时间。 建立索引 建立索引是优化 MySQL 查询性能的一种重要方法。...
4. **成都道路.shx**:Shapefile索引文件,用于快速访问Shapefile中的几何记录,提高数据读取速度和查询效率。 结合这些文件,我们可以构建出成都市的道路网络图层,通过GIS软件进行可视化展示、空间分析(如距离...
在Oracle数据库环境中,查询当前用户下所有表的记录总数是一个常见的需求,这有助于数据库管理员或开发人员了解数据存储的情况,进行性能分析或者容量规划。以下将详细介绍如何通过SQL语句来实现这一目标,并探讨...
1. 使用查询构建器进行数据查询操作,并获取符合条件的数据总数。 2. 根据数据总数计算出总的页数。 3. 判断当前请求的页码是否超出实际页数范围,如超出,则进行修正。 4. 实例化ThinkPHP分页类,将总数据数、每页...
- 在这个例子中,Hibernate用于建立Java对象(Entity)与数据库表之间的映射关系,通过Session接口进行数据的CRUD操作。例如,使用`SessionFactory`创建`Session`,然后调用`save()`, `get()`, `update()` 和 `...
在信息检索中,倒排记录表是一个重要的数据结构,它将文档ID和词项ID关联起来,以便快速地检索文档。合并算法是将多个倒排记录表合并成一个,用于处理复杂的查询语句。该算法的时间复杂度为Θ(N),其中N是文档总数。...
标题和描述中提到的资源是一个包含了全球旅游城市数据的MySQL数据库,可以方便地直接导入并运行SQL语句,总数超过6000条。这个压缩包文件是针对餐饮旅游行业的数据整理,对于分析旅游趋势、餐饮业分布或者进行相关...
此方法会将记录集中的数据复制到指定的Excel工作表范围,提供了一种快速高效的数据转移手段。 ### 总结 通过以上步骤,我们可以看到VBA与SQLite的结合使用提供了强大的数据处理能力。无论是连接数据库、执行复杂...
在通讯录应用中,这种结构允许快速地在链表的任何位置进行插入和删除操作,而不必像线性数组那样移动大量元素。 **存储结构** 在通讯录的实现中,每个节点代表一个联系人记录,包含以下字段: - 姓名(name) - ...
2. 特点:矢量数据的优势在于其空间精度高,可以进行精细化的空间分析,同时数据结构紧凑,便于查询和编辑。此外,由于人口数据是动态变化的,矢量数据的更新和维护也相对容易。 二、Arcmap 中的应用 1. 展示人口...