透明 发表于 2015-1-16 14:07:10

查询数据库中一切表的数据数目的办法

因此我们的方案中要构造这种逆操作。Event_type增加一种FLASHBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。要查询一个表的数据数目,信任人人很快就想到了selectcount(1)fromtable1,但假如我们要查询数据库中一切表的的数据数目要怎样查呢?办法对照多,上面先容两种自己经常使用的办法:

一,使用sp_spaceused存储历程,sp_spaceused一次只能查询一个表的数据情形,以是利用sp_spaceused还得分离游标,不是很好的办理办法,人人能够参考第二种办法:
使用sp_spaceused的办法以下:
setnocounton
createtable#t1
(
namevarchar(200),
rowsint,
reservedvarchar(50),
datavarchar(50),
index_sizevarchar(50),
unusedvarchar(50)
)
declare@tablenamevarchar(200)
declare@sqlvarchar(2000)
declarem_cursorcursorlocalforselectobject_name(object_id)fromsys.objectswheretype=U
openm_cursor
fetchnextfromm_cursorinto@tablename
while@@fetch_status=0
begin
set@sql=insertinto#t1execsp_spaceused+@tablename
exec(@sql)
fetchnextfromm_cursorinto@tablename
end

closem_cursor
deallocatem_cursor
selectname,rowsfrom#t1
droptable#t1

复杂先容一下存储历程sp_spaceused感化:显现行数、保存的磁盘空间和以后数据库中的表、索引视图或SQLServer2005ServiceBroker行列所利用的磁盘空间,或显现由全部数据库保存和利用的磁盘空间。

假如我们如许实行:sp_spaceused表名
它会前往六列了局,截图以下:

name:表名
rows:该表的数据行数
reserved:由数据库中工具分派的空间总量
data:数据利用的空间总量
index_size:索引利用的空间总量
unused:保存但还没有利用的空间总量

个中rows就是我们要的了局列。

二,使用sys.dm_db_partition_stats,Sql命令以下:
selectb.name,a.row_countfromsys.dm_db_partition_statsa,
sys.objectsb
wherea.object_id=b.object_id
anda.index_id<=1
andb.type=U

sys.dm_db_partition_stats它前往以后数据库中每一个分区的页和行计数信息,在下面的sql中,三个关头列的意义以下:
object_id:表大概索引视图的ID,以是能够用它与sys.objects表的object_id相婚配。
row_count:该表或索引视图中数据的数目,就是我们要查询的了局。
index_id:该表或索引视图的索引ID。假如该表没有索引,那末会在sys.dm_db_partition_stats中存在一行index_id=0的纪录,假如有一个会萃索引(并且一个表中也只能有一个会萃索引),那末在sys.dm_db_partition_stats中存在一行index_id=1的纪录,而对应的index_id=0的纪录没有了。假如这个表在sys.dm_db_partition_stats中存在多行index_id>1的纪录,则申明这个表存在多个非会萃索引,我们这里判别index_id<=1,是假定每一个表都有主键,且主键为会萃索引。共同sys.objects表的type=U,就能够查出每一个用户表的数据数目了。

sys.dm_db_partition_stats别的行的信息,人人能够查询msdn匡助文档。php本地模拟的prepare底层就是mysql_real_escape_string,所以必须得用mysql_set_character_set去设置mysql->charset,否则就存在字符集问题。

再现理想 发表于 2015-1-16 22:20:19

查询数据库中一切表的数据数目的办法

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的工具

分手快乐 发表于 2015-1-19 09:05:08

始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。

飘灵儿 发表于 2015-1-28 05:59:39

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

愤怒的大鸟 发表于 2015-2-5 18:45:52

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

简单生活 发表于 2015-2-13 06:24:15

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

admin 发表于 2015-3-3 17:25:12

以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了

小女巫 发表于 2015-3-11 12:35:12

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

变相怪杰 发表于 2015-3-18 17:56:13

在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。

山那边是海 发表于 2015-3-26 13:47:55

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
页: [1]
查看完整版本: 查询数据库中一切表的数据数目的办法