SQL Count(*) 性能:为什么慢以及如何改进它
处理大型表时,了解这一点很重要某些查询(例如“COUNT()”)如何影响性能。本文探讨了为什么简单的“COUNT()”查询会根据其参数导致显着的性能差异。
在给定的示例中,查询“if (select count() from BookChapters) = 0' 执行速度很快,因为 SQL Server 将其优化为 '如果存在(select from BookChapters)'。此优化版本仅扫描单行,而不是计算所有行。
但是,查询 'if (select count() from BookChapters) = 1' 和 'if (select count() )来自书籍章节)> 1' 执行速度较慢,因为 SQL Server 采用不同的逻辑。当表缺少任何非聚集索引时,SQL Server 将使用最窄的非聚集索引进行“COUNT(*)”操作。如果没有非聚集索引,则必须扫描整个表,这对于大型数据集来说可能非常耗时。
优化 Count(*) 速度
提高'COUNT(*)' 查询的性能,请考虑以下策略:
SELECT OBJECT_NAME(i.id) [Table_Name], i.rowcnt [Row_Count] FROM sys.sysindexes i WITH (NOLOCK) WHERE i.indid in (0,1) ORDER BY i.rowcnt desc
SELECT OBJECT_NAME(i.id) [Table_Name], i.rows [Row_Count] FROM sysindexes i (NOLOCK) WHERE i.indid in (0,1) ORDER BY i.rows desc
通过利用这些技术,您可以显着加快“COUNT(*)”查询的执行时间,尤其是在大型查询上数据集。
以上是为什么 SQL COUNT(*) 很慢,如何加快速度?的详细内容。更多信息请关注PHP中文网其他相关文章!