Sqlserver如何大概推算一张表最后一次发生DML的时间

结论
1、sys.objects对应的modify_date不代表一张表的最后一次DML修改时间,truncate table也不会触发sys.objects对应的modify_date改变
2、当数据库的自动更新统计信息选项is_auto_update_stats_on打开时,且没有手动执行UPDATE STATISTICS testa,则表在sys.stats对应的STATS_DATE(object_id,stats_id)对应的时间可以大概推测出表的最后一次DML修改时间,虽然不是特别准确

select * from sys.objects where name=‘testa’;
sys.objects对应的modify_date显示为2019年

SELECT OBJECT_NAME(object_id) AS TableName, STATS_DATE(object_id,stats_id) AS statistics_date
FROM sys.stats where OBJECT_NAME(object_id)=‘testa’;
sys.stats对应的STATS_DATE(object_id,stats_id)显示为2019年

UPDATE STATISTICS testa; --手动执行统计信息收集

select * from sys.objects where name=‘testa’;
sys.objects对应的modify_date显示为2022年当前时间
备注:UPDATE STATISTICS testa手动执行统计信息收集后,不管表是否发生DML,sys.objects对应的modify_date没变

SELECT OBJECT_NAME(object_id) AS TableName, STATS_DATE(object_id,stats_id) AS statistics_date
FROM sys.stats where OBJECT_NAME(object_id)=‘testa’;
sys.stats对应的STATS_DATE(object_id,stats_id)显示为2022年当前时间
备注:UPDATE STATISTICS testa手动执行统计信息收集后,不管表是否发生DML,sys.stats对应的STATS_DATE(object_id,stats_id)有变化

truncate table testa;
select * from sys.objects where name=‘testa’;
sys.objects对应的modify_date显示时间没有变化,还是2022年上次时间
UPDATE STATISTICS testa;
sys.objects对应的modify_date显示时间没有变化,还是2022年上次时间

select name,is_auto_create_stats_on,is_auto_update_stats_on from sys.databases
当数据库的is_auto_create_stats_on,is_auto_update_stats_on都会为1,且查询到表在sys.stats对应的STATS_DATE(object_id,stats_id)在最近一个月内,说明变化,这说明这个数据库的表在这一个月有过DML修改记录。

自动更新统计信息何时发生:当表的行数大于500行时,比如表是2万行,则计算为500+(0.2*20,000)=4,500,统计信息将在每4500次修改发生后更新一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值