【SQL Server】统计表记录数
来源:互联网 发布:日语网络课程哪家好 编辑:程序博客网 时间:2024/06/05 10:56
说起统计表的记录数,第一印象就是count(*), 弊端这里就不多说了,这里将为大家介绍一些常用的查询表记录数的系统视图。
首先,介绍系统存储过程sp_spaceused, 返回结果包括行数、保留的磁盘空间以及当前数据库中的表、索引视图或 Service Broker 队列所使用的磁盘空间,或由整个数据库保留和使用的磁盘空间。使用起来很简单,直接加需要统计的表名即刻。
EXEC sp_spaceused 'Table_Name';
除了表的记录数,以上语句会返回很多空间相关的信息(这里暂不做介绍)。为了只获取返回的记录数信息,查看了sp_spaceused的源码(喜欢作啊~~),从中抽取了只用于统计记录数的相关表/视图。
方法一 , 使用系统视图sys.dm_db_partition_stats查询记录数。
SELECT sum(row_count) as ROW_COUNT FROM sys.dm_db_partition_stats WITH (NOLOCK) WHERE index_id < 2 and object_id = OBJECT_ID('Table_Name')
方法二 ,使用系统视图sys.partitions查询记录数。
SELECT sum(rows) as ROW_COUNT from sys.partitions WITH (NOLOCK) where index_id < 2 and object_id = OBJECT_ID('Table_Name')
方法三 ,使用来自SQL Server 2000的系统视图sysindexes,不知道在2000版本中表现如何,在后续的SQL Server版本中sysindexes查询记录数或者查询上次更新统计信息后变化的记录数,都会偶尔出现不准确的情况,所以不建议使用。
SELECT rowcnt FROM sysindexes WITH (NOLOCK) WHERE indid IN (0,1) and id = OBJECT_ID('Table_Name')
衍生开来,有时候需要统计数据库中所有的表分别的记录数,此时继续使用以上系统视图。
方法一 :
SELECT OBJECT_NAME(object_id) as Table_Name, sum(row_count) as ROW_COUNT FROM sys.dm_db_partition_stats WITH (NOLOCK) WHERE index_id < 2 group by object_id order by ROW_COUNT desc
方法二 :
SELECT OBJECT_NAME(object_id) as Table_Name, sum(rows) as ROW_COUNT from sys.partitions WITH (NOLOCK) where index_id < 2 group by object_id order by ROW_COUNT desc
方法三:
SELECT OBJECT_name(id) as Table_Name, rowcnt from sysindexes WITH (NOLOCK) where indid in(0,1) order by rowcnt desc
那么,temp表的记录数能不能查呢,答案是必须可以啊
SELECT T.name, P.rows, T.create_date, T.modify_dateFROM Tempdb.sys.tables TJOIN Tempdb.sys.partitions P ON T.object_id = P.object_idWHERE T.name LIKE N'#tmp%'ORDER BY T.create_date DESC
最后,再给出一个SQL用于统计数据库中所有表的记录数,分配的总空间,已使用/未使用空间以及数据页使用的空间大小。通常在遇到空间不足的问题时,我会使用该SQL统计DB中所有表及其空间使用情况,以便做进一步的清理操作,释放存储空间。注意,清理数据只会释放数据页使用的空间,并不会直接释放磁盘空间(已分配空间不会减少),只有shrink后才会释放相应的磁盘空间。
SELECT s.Name AS SchemaName, t.NAME AS TableName, SUM(p.rows)/COUNT(distinct a.type) AS RowCounts, CAST(SUM(a.total_pages) as float) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, SUM(a.data_pages) * 8 AS DataSpaceKB, CAST((SUM(a.total_pages) - SUM(a.used_pages)) as float) * 8 AS UnusedSpaceKB, MIN(FILEGROUP_NAME(a.data_space_id)) as FileGroupFROM sys.tables tJOIN sys.schemas s ON s.schema_id = t.schema_idJOIN sys.indexes i ON t.OBJECT_ID = i.object_idJOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_idJOIN sys.allocation_units a ON p.partition_id = a.container_idWHERE t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 AND i.index_id < 2 GROUP BY t.Name, s.NameORDER BY TotalSpaceKB desc
- 【SQL Server】统计表记录数
- SQL 快速统计表记录总数
- SQL Server统计表的行数
- 统计表记录条数的方法比较
- sql server oracle 统计表中的字段数量
- db2统计表的数量及每个表的记录数
- Sql Server统计表中某年某月某个值有多少?
- 统计表记录行数
- 户数统计表
- SQL SERVER 遍历库中的表及其记录数
- 统计表结构中的列数
- Hibernate统计表中的条数
- 【日常SQL】存款统计表增加记录检查分劈比例问题
- SQL server 入门记录
- sql server 重复记录
- SQL Server 2000性能测试分析 sql 表最大记录数
- 统计表中至少出现三次的记录
- 查询数据表的总记录数(row_count自定义函数)-sql server 2005
- 仿微信朋友圈,仿微信小视频 ,录制视频功能
- Java基础12 类型转换与多态
- Android Drawable 那些不为人知的高效用法
- 可以访问tomcat主页,不能访问项目(tomcat的写入权限不够)
- 【多图】值得收藏!JavaScript语言基础知识总结
- 【SQL Server】统计表记录数
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- RxJava 转换操作符 switchMap
- 数据库连接池、静态连接,普通连接的比较1(单线程)
- jQuery中ajax的4种常用请求方式
- 闭包学习笔记
- 【转】Android最佳性能实践(三)——高性能编码优化
- 从OC到Swift
- SVM(三) SMO优化算法求解