[英]SQL - Poor Performance SELECT Query on 377 million table
我得到了一個具有以下結構的表:
Id | clientid | type | timeStamp | message |
我正在使用此查詢來獲取表的第一行以開始刪除行但是崩潰了DB:
SELECT TOP 10 [id]
,[clientid]
,[type]
,[timeStamp]
,[message]
FROM [db].[dbo].[table]
WHERE timeStamp LIKE '%2014-01-01 00:00:00.000%'
有沒有辦法讓第一行沒有崩潰並刪除它們才到達timeStamp
'2016-01-01 00:00:00.000'
?
我不確定我是否理解這一點:
如果在TimeStamp列上設置索引,則應該絕對快速地過濾給定日期的行或多或少。
這些行將刪除TimeStamp小於2016-01-01的表中的所有內容。 只剩下當前的參賽作品......
DELETE FROM myTable
WHERE ID IN(SELECT ID
FROM myTable AS innerTbl
WHERE innerTbl.Timestamp<{ts'2016-01-01 00:00:00'}
)
這將刪除每次調用1000行。 “GO”背后的數字將執行此片段377000次。 用較小的數字測試......
BEGIN TRANSACTION;
DELETE FROM myTable
WHERE ID IN(SELECT TOP 1000
ID
FROM myTable AS innerTbl
WHERE innerTbl.Timestamp<{ts'2016-01-01 00:00:00'}
);
COMMIT;
GO 377000
簡單?
WHERE timeStamp = '2014-01-01 00:00:00.000'
你為什么用LIKE
? 這最有效地減慢了查詢速度, LIKE
通常用於比較部分字符串。
你可以截斷日期時間,並使用正常比較:
SELECT TOP 10 [id]
,[clientid]
,[type]
,[timeStamp]
,[message]
FROM [db].[dbo].[table]
WHERE cast(timeStamp AS DATE) = '2014-01-01'
當沒有額外的東西可以添加到日期時間時,不確定為什么使用LIKE
。
要么使用=
。
SELECT TOP 10 [id]
,[clientid]
,[type]
,[timeStamp]
,[message]
FROM [db].[dbo].[table]
WHERE timeStamp ='2014-01-01 00:00:00.000'
或者,如果您嘗試從當天開始全部使用CONVERT
功能。 (我選擇了103
因為我從西班牙看到你並使用DD/MM/YYYY
格式)。
SELECT TOP 10 [id]
,[clientid]
,[type]
,[timeStamp]
,[message]
FROM [db].[dbo].[table]
WHERE CONVERT(VARCHAR(11),timeStamp ,103) = '01/01/2014'
我猜ID是一個標識列? 可能懶惰的DBA也把它作為聚集索引? 做就是了
DELETE TOP (10) from [Table] order by ID ASC
請注意,在完全記錄模式下,這將是激烈的
您應該在時間戳上創建索引。
您可以設置過濾索引,因為它是一個相當大的表。
CREATE NONCLUSTERED INDEX IX_Table_timestamp ON Table([timestamp]) WHERE CONVERT(DATE,[timestamp]) = '2014-01-01';
然后按小批量刪除行。
來自Aaron Bertrand的舊帖子的代碼。
SET NOCOUNT ON;
DECLARE @r INT;
SET @r = 1;
WHILE @r > 0
BEGIN
BEGIN TRANSACTION;
DELETE TOP (10000)
dbo.Table
WHERE CONVERT(DATE,[timestamp]) = '2014-01-01';
SET @r = @@ROWCOUNT;
COMMIT TRANSACTION;
END
如果您有一個自動遞增的列ID,而不是使用ID選擇第一行的原因?
DELETE TOP (1) from [Table] order by ID ASC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.