![](/img/trans.png)
[英]How do I select insert into select a table which already has values in the primary key column without adding new rows?
[英]Select query on primary key column of 500+ million rows table is not responding
我在 SQL Server 中有一個表,它有 500 多萬行,在表的主鍵上定義了默認聚集索引。 我正在運行這個需要 30 多分鍾的簡單查詢。
Select count(ledgeridXXX) from Ledger.dbo.tblXXXX
這是聚集索引定義的塊
CONSTRAINT [PK__tblDepar__AE70E0AFF9BAF7B9] PRIMARY KEY CLUSTERED
(
[LedgerIDXXX] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
我不知道哪里可能出錯,為什么要花這么多時間。 請建議我一些解決方法或技術,因為這是一個關鍵表,主要報告嚴重依賴於該表。
如果你只是計算行數,你可以試試這個:
SELECT SUM(p.rows) as [cnt]
FROM sys.partitions AS p
INNER JOIN sys.tables AS t ON p.[object_id] = t.[object_id]
INNER JOIN sys.schemas AS s ON t.[schema_id] = s.[schema_id]
WHERE p.index_id = 1 /* clustered index */
AND t.name = N'tblXXXX'AND s.name = N'dbo';
當您有密集的工作量時, COUNT(clusteredkey)
可能會有一些開銷。 這可能需要數小時才能掃描整個 5 億行。
如果您運行的是更高版本的 SQL Server,則可以使用列存儲索引來加速COUNT
。
參考:
當您在沒有where
子句的情況下執行COUNT(Column)
、 COUNT(1)
、 COUNT(*)
時會發生什么:
SQL Server 查找將完成這項工作的最小(包含最少的列數,單個 AK 頁中的最多行)索引。
如果您只有一個聚集索引,這意味着它將使用聚集索引。 (聚集索引包含表的所有列)
你可以做些什么來加快速度:
WITH(TABLOCK)
或WITH(TABLOCKX)
以強制表鎖或排他表鎖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.