【发布时间】:2010-07-20 07:41:40
【问题描述】:
在包含几十个表的数据库中更改和查找内容,其中大表中有大约 50 万行我经常遇到超时。
其中一些超时我不明白。例如我得到了这张表:
CREATE TABLE dbo.[VPI_APO]
(
[Key] bigint IDENTITY(1,1) NOT NULL CONSTRAINT [PK_VPI_APO] PRIMARY KEY,
[PZN] nvarchar(7) NOT NULL,
[Key_INB] nvarchar(5) NOT NULL,
) ON [PRIMARY]
GO
ALTER TABLE dbo.[VPI_APO] ADD CONSTRAINT [IX_VPI_APOKey_INB] UNIQUE NONCLUSTERED
(
[PZN],
[Key_INB]
) ON [PRIMARY]
GO
当我像这样在此表中搜索项目时(在插入大量项目期间)时,我经常遇到超时:
SELECT [Key] FROM dbo.[VPI_APO] WHERE ([PZN] = @Search1) AND ([Key_INB] = @Search2)
搜索唯一约束时的这些超时经常发生。我期望独特的约束具有与索引相同的好处,我弄错了吗?我也需要这些字段的索引吗?
还是我必须进行不同的搜索才能受益于约束?
我使用的是 SQL Server 2008 R2。
【问题讨论】:
-
是
@Search1和@Search2NVARCHAR 吗?如果它们不是 Unicode 字符串,那么我之前见过这种事情(排序规则不匹配)导致此类性能问题。
标签: performance tsql sql-server-2008 indexing