[英]SELECT takes too long
我需要你的幫助 :)
我在數據庫(SQL Server 2008 R2)中有一個表。 目前大約有4M行。
消費者應用程序從那里獲取行(鎖定並處理)。
為了防止行被多個使用者占用,我通過在適當的列中添加一些標志來鎖定行...
所以,要“鎖定”記錄
SELECT TOP 1 .....
然后對具有特定ID的記錄進行UPDATE
操作。
現在,此操作最多需要5秒鍾(我在SQL Server Management Studio中嘗試過):
SELECT TOP 1 *
FROM testdb.dbo.myTable
WHERE recordLockedBy is NULL;
我如何加快速度?
這是表的結構:
CREATE TABLE [dbo].[myTable](
[id] [int] IDENTITY(1,1) NOT NULL,
[num] [varchar](15) NOT NULL,
[date] [datetime] NULL,
[field1] [varchar](150) NULL,
[field2] [varchar](150) NULL,
[field3] [varchar](150) NULL,
[field4] [varchar](150) NULL,
[date2] [datetime] NULL,
[recordLockedBy] [varchar](100) NULL,
[timeLocked] [datetime] NULL,
[field5] [varchar](100) NULL);
索引應放在查詢的where子句中使用的任何列上。 因此,您應該向recordLockedBy
添加一個索引。
如果您不了解索引,請點擊此處
為您更快的入門:
ALTER TABLE myTable
ADD INDEX IDX_myTable_recordLockedBy (recordLockedBy)
您的select語句也通過id查詢嗎? 如果是這樣,則應將其設置為具有聚集索引的主鍵(我認為是PK的默認鍵)。 然后,SQL將能夠直接跳轉到記錄-應該接近即時。 如果沒有它,則將進行表掃描,以按照它們在磁盤上出現的順序查看每個記錄,直到找到您要查找的記錄為止。
這不會阻止表上的爭用條件,並允許多個使用者處理同一行。
查看UPDLOCK和READPAST鎖定提示來處理這種情況:
如果該表用於作業調度和處理,也許您可以使用MSMQ解決此問題。 您無需擔心鎖定之類的事情。 它還可以在企業上更好地擴展,並具有許多不同的發送/接收模式。
您可以在此處了解更多信息: http : //msdn.microsoft.com/zh-cn/library/windows/desktop/ms711472(v=vs.85).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.