我有一些第三方软件,经常执行相同的更新查询,在1,000万行表上使用1gb数据。
(@P1 bigint,@P2 bigint,@P3 bigint,@P4 bigint,@P5 bigint)
UPDATE top(1000) hsi.hspendingitems
SET status = @P1
WHERE handlertype = @P2
AND status in (@P3,@P4,@P5)
初始结果(不作修改)
查询1计划:
https://www.brentozar.com/pastetheplan/?id=Syv7OxRHW
查询IO统计信息
表'h
统计IO (逻辑/物理读取)是否包括非叶级索引页?
下面的示例是直接从盖尔·肖的这一旧职位中删除的:
https://sqlinthewild.co.za/index.php/2009/03/05/when-is-a-seek-actually-a-scan/
--Setup
CREATE TABLE TestingSeeks (
id int identity (1,1) not null,
SomeStr char(6) default '' -- a filler
)
insert into TestingSeeks (SomeStr)
select t
我们正在测试包含日期时间列(DateColumn)的表上的分区。
我使用的分区函数是:
-- 138623 + 16774 records
CREATE PARTITION FUNCTION pf_TableName_DateColumn (datetime)
AS RANGE LEFT
FOR VALUES ('20160101', '99991231');
如何验证分区表是否提高了查询性能?
在PARTITION SCHEME上有一个聚集索引,剩余的非聚集索引是否获得分区的统计信息?
我正在通过在两个数据库(real和副本)上运行具有日期参数的相同存储
请问是否有办法知道更新表/索引统计数据的适当时间?
最近,我们的BI,SQL Server 2012中的一个主要数据集市表的性能越来越差。每个周末,所有的索引都会根据它们的分割率来进行重组/重建,而现在它们作为avg_fragmentation_in_percent的比例还不到5%。
因此,我们检测到这是由过时的表/索引统计信息或表碎片引起的。
一般来说,我们设置了autostats,表/索引统计数据在2018年7月被更新,也许现在还不是根据它们的优化器更新的时候,因为该表很大,总记录在7亿左右,每天增加约50万条记录。
这是PK统计数据和该表的实际记录计数。
-- statistics
d
在这件事上,我似乎找不到波尔的确切答案。在这种情况下,数据库调优顾问建议我创建统计数据。这是其中的几个例子:
CREATE STATISTICS [_dta_stat_1045578763_1_4] ON [dbo].[BillableTimeEntries]([Id], [Phase_Id]) WITH FULLSCAN
go
CREATE STATISTICS [_dta_stat_1045578763_1_11_4] ON [dbo].[BillableTimeEntries]([Id], [LineItem_Id], [Phase_Id]) WITH FULLSCAN
go