在SQL Server 2008中计算表行的有效查询是什么
答案 0 :(得分:5)
要获得准确的答案,在规范化数据库中获取表中确切行数的合理方法是执行:
select count(*) from table;
在没有任何索引的表上,数据库将执行全表扫描。如果您已索引非空列,则数据库可能会使用(可能小得多)索引来解析您的查询。
如果您需要更快的解决方案,则必须跟踪表中的nr行,而不必依赖于计算行本身。例如,您可以自己在另一个表中(作为精心设计的API的一部分或使用触发器等)或为此目的创建*索引视图。
但是,如果你只需要一个aproximation,并且快速得到答案是至关重要的,那么其他人已经通过使用字典(约翰,马丁)来证明这样做的方法
* 免责声明:我实际上并没有在SQL服务器中使用索引视图,我只是阅读文档并假设它们可以与Oracle中的物化视图做同样的事情。
答案 1 :(得分:1)
SELECT COUNT(*) FROM TableName
这对你有用吗?
答案 2 :(得分:1)
SELECT COUNT(*) FROM table_name
将有一个简单的计划。没有优化范围。
您可以使用WITH NOLOCK
来减少锁定开销,但存在一些不准确的风险。
或使用
SELECT sum(rows)
FROM sys.partitions
where object_id=object_id('foo') and index_id < 2
但是,这也不会给你一个事务上一致的答案。