在一個數據庫中更改和查找包含幾十萬行的數據庫中的數據,這些數據在我經常遇到超時的大數據行中有大約50萬行。SQL超時和索引
其中一些超時我不明白。例如,我得到這個表:
SELECT [Key] FROM dbo.[VPI_APO] WHERE ([PZN] = @Search1) AND ([Key_INB] = @Search2)
這些超時在搜索時:
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
我常常當我在這個表像這樣的搜索項超時(插入大體積物品的過程中)獨特的約束經常發生。我認爲獨特的約束與索引具有相同的好處,我誤解了嗎?我是否也需要在這些領域的索引?
或者我將不得不以不同方式搜索以獲得約束?
我正在使用SQL Server 2008 R2。
「@ Search1」和「@ Search2' NVARCHAR?如果它們不是Unicode字符串,那麼我就會看到之前導致此類性能問題的這類事情(排序規則不匹配)。 – 2010-07-20 12:19:52