目前,我在Azure的一个数据库中遇到了一个问题,其中一个表迫使我们扩展整个数据库以满足CPU需求。该表的基本结构如下:

column_a是唯一的,不能为空。column_b可以是空的。
这个表中有160万行,所以它不是一个大表,但是在我们构建的整个系统中都使用它。我们有几个推送数据的提要,其中需要在这个表中输入一个条目,因此对于接收到的每一个新请求,都有一个条目的检查,如果不存在,则创建一个条目并返回id。一旦接收到这些数据,我们就会有订阅者接收该数据,并使用此表将系统保存的其他信息链接到一个很好的接口中。

上表显示了在24小时内在此数据库上运行的最昂贵的查询。黄色突出显示的是SELECT TOP (1) id FROM TableName WHERE column_a = @param1。
这只是一个糟糕的数据库体系结构,还是缺少了一个优化表上读取数量的技巧?不幸的是,正在执行的读取数量只会增加,因为我们每个月都要添加新的数据提要,并且我们的目标是在今年年底之前拥有5-10倍的提要数量。
任何帮助都是非常感谢的,如果上面的任何事情都不清楚的话,我很抱歉。
创建表查询
CREATE TABLE [dbo].[TableName](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[column_a] [varchar](50) NOT NULL,
[column_b] [varchar](50) NULL,
CONSTRAINT [PK_TableName] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY],
CONSTRAINT [AK_Column_A] UNIQUE NONCLUSTERED
(
[plate] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO编辑2请理解,我已经编辑的名字。

发布于 2021-05-27 14:04:20
有一个计划,其谓词为CONVERT_IMPLICIT(nvarchar(50),column_a,0) = @顺式1
有人正在传递NVARCHAR参数,从而防止索引的使用。要么修复代码,要么将列更改为NVARCHAR(50)。将VARCHAR参数与NVARCHAR列进行比较没有问题,因为NVARCHAR具有更高的数据类型优先,因此将转换该参数而不是该列。
发布于 2021-04-28 17:55:45
我想说问题是执行死刑的问题。当您每次执行两行的时间时,大约为每行0.8秒。但是select经常被执行,通过比较它消耗了cpu。
在绝热中,@param的数据类型是什么?
https://dba.stackexchange.com/questions/290657
复制相似问题