Azure SQL 数据库。
我有一个表,我需要从中获取Col1和Col2基于 的第一行和最新行CreateDate。
CREATE TABLE dbo.table1 (
Id INT IDENTITY(1,1) PRIMARY KEY ,
Col1 VARCHAR(255) COLLATE SQL_Latin1_General_CP1_CS_AS NOT NULL ,
Col2 VARCHAR(255) COLLATE SQL_Latin1_General_CP1_CS_AS NOT NULL ,
CreateDate DATETIME NOT NULL
) ;
Run Code Online (Sandbox Code Playgroud)
我有一个像这样的索引:
CREATE INDEX IX__table1_ASC
ON dbo.table1 (Col1, Col2, CreateDate );
Run Code Online (Sandbox Code Playgroud)
我获取第一行的查询是(计划在这里):
--Get the first row
SELECT TOP (1) WITH TIES
*
FROM table1
ORDER BY ROW_NUMBER()
OVER (PARTITION BY Col1, Col2
ORDER BY CreateDate );
Run Code Online (Sandbox Code Playgroud)
索引扫描使用我创建的索引 ( …
sql-server optimization execution-plan azure-sql-database query-performance
在 SSMS 中,当使用服务帐户和 SQL Server 身份验证连接到任何 Azure SQL 数据库时,连接本身可能需要 10 到 15 秒才能建立。
连接后,右键单击任何表,然后单击“选择前 1000 行”,这也需要 10 到 15 秒的时间来响应并在 SSMS 中显示行。
使用“Active Directory - Universal with MFA Supprt”身份验证时,不会发生任何延迟/滞后 - 但是,这不使用相同的服务帐户。
如何解决/调查 SQL Server 身份验证延迟?
我正在编写一个 TVF 来查询一个大表(数千万行),其中该表中的字符串(邮政编码)与另一个表中的字符串(部分邮政编码(输出代码/扇区部分))匹配。
我遇到了无法解决的边缘情况。
这是一些示例数据。
DECLARE @tab1 TABLE (Sk INT, Postcode VARCHAR(8))
DECLARE @tab2 TABLE (Sk INT, Coverage VARCHAR(8))
INSERT INTO @tab1 (Sk, Postcode) VALUES (1, 'E12 5HH'), (6, 'SW1X 6AA')
INSERT INTO @tab2 (Sk, Coverage) VALUES (1, 'E12'), (1, 'E12 5'),
(2, 'E1'), (2, 'E11'), (2, 'E13'),
(3, 'E12 6'),
(4, 'E12 5') ,
(5, 'E12') ,
(7, 'SW1') ,
(8, 'SW1X')
Run Code Online (Sandbox Code Playgroud)
和我当前的查询
SELECT S.Sk,
S.Postcode,
CoverageSk = X.Sk,
X.Coverage
FROM @tab1 S
OUTER APPLY (
SELECT Sk …Run Code Online (Sandbox Code Playgroud) 在 Azure SQL 数据库(SQL2019 兼容)上,我有一个 ETL 进程,它以 DeltaTrack 模式填充 HISTORY 表。
在 Proc 中,有一个对 HISTORY 表的更新,查询引擎正在使用 SORT,但我有一个应该覆盖它的索引。
此 UPDATE 的用例是针对现有行,自从该行首次添加到 HISTORY 表中以来,我们已向摄取添加了额外的列。
这种排序会导致我们更大/更宽的表上的更新速度极其缓慢。
如何调整索引或查询以删除查询 3中的排序?
这是根据京东要求更新的 执行计划
这是 DDL。
DROP TABLE IF EXISTS dbo.STAGE;
GO
CREATE TABLE dbo.STAGE
(
Id varchar(18) NULL,
CreatedDate varchar(4000) NULL,
LastModifiedDate varchar(4000) NULL,
LastReferencedDate varchar(4000) NULL,
[Name] varchar(4000) NULL,
OwnerId varchar(4000) NULL,
SystemTimestamp datetime2(7) NULL
)
GO
DROP TABLE IF EXISTS dbo.HISTORY;
GO
CREATE TABLE dbo.HISTORY
(
HistoryRecordId int IDENTITY(1,1) …Run Code Online (Sandbox Code Playgroud) sql-server execution-plan azure-sql-database sort-operator query-performance
例如,如果 SQL 代理不适用于 Azure SQL 数据库,那么是否可以使用 Ola Hallengren 的维护脚本来维护(索引、统计等)数据库?
sql-server maintenance statistics azure-sql-database index-maintenance
我有一个宽表,相对较大,有 14,264,775 行,在 Azure SQL 数据库上运行。
以下查询需要一些 TLC。
IF EXISTS (
SELECT 1/0
FROM dbo.table1 src
INNER JOIN dbo.table1 tgt
ON tgt.Col1 = src.Col1
WHERE tgt.ValidFrom <= src.ValidTo
AND tgt.ValidTo >= src.ValidFrom
AND tgt.RecordId <> src.RecordId
)
BEGIN
RAISERROR('Overlap detected in dbo.table1', 11, 1);
END ;
Run Code Online (Sandbox Code Playgroud)
我有这个索引。
CREATE NONCLUSTERED INDEX [IX__table1] ON dbo.table1
( Col1 )
INCLUDE (ValidFrom, ValidTo, RecordId)
GO
Run Code Online (Sandbox Code Playgroud)
这是查询的 io 统计信息。逻辑阅读能力非常出色。
这是计划 XML。我尝试了 PasteThePlan,但它无法解析计划 XML。(也许它不喜欢Axure sql数据库计划xml)。
如您所见,[src] 上有一个索引扫描;读取 14,264,775 行(与表中的所有行数相同)。并在 [tgt] 上进行索引查找;读取 194,405,307 行。
我需要改变什么来提高查询的性能? …
sql-server index-tuning azure-sql-database query-performance