gpt4 book ai didi

sql-server - 无条件 Count(*) 与系统表

转载 作者:行者123 更新时间:2023-12-02 22:45:30 27 4
gpt4 key购买 nike

我的一位同事向我展示了计算表中记录的数量,以下 View :

CREATE VIEW [SPR].[TablesCount]

AS

SELECT s.name cSchema,
t.name cTable,
sum(p.rows) eRowCount
FROM sys.tables t
INNER JOIN sys.schemas s
ON s.schema_id = t.schema_id
INNER JOIN SYS.partitions p
ON p.object_id = t.object_id
WHERE p.index_id < 2
GROUP BY s.name,
t.name

比普通的执行速度快得多

select count(*) from table

这是为什么?数据库引擎不应该优化为始终遵循最短路径吗?系统 TableView 解决方案的缺点是什么?

最佳答案

不保证元数据中存储的值是正确的。 DBCC UPDATEUSAGE发生这种情况时可用于纠正这种情况(自 SQL Server 2000 以来这种可能性较小)

而且它在事务上也不一致。您可以读取未提交事务更新的计数值。

这些值也可以手动更新。

CREATE TABLE dbo.YourTable(X INT)

UPDATE STATISTICS dbo.YourTable WITH ROWCOUNT = 1000000

SELECT sum(p.rows) eRowCount
FROM sys.partitions p
WHERE P.object_id =object_id('dbo.YourTable') AND p.index_id < 2

关于sql-server - 无条件 Count(*) 与系统表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17446002/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com