【发布时间】:2013-11-20 21:32:20
【问题描述】:
由于表的大小(超过 1000 万条记录),我有一个查询超时。
创建新索引不是一种选择。该查询在 sql server 上运行,并由 .net 网站调用。
有什么方法可以在超时发生之前从结果中返回。
select count(XYZ.A) from XYZ where XYZ.B = 'abc';
测量经过的时间并在查询超时之前返回结果。
谢谢
【问题讨论】:
-
您使用的是什么 DBMS?向我们展示您的表结构?
-
你在那个表上有索引吗?如果您在一个小的、不可为空的列(如
INT或BIGINT)上有一个索引,那么COUNT(*)将使用该列,并且很可能它必须读取更少的数据页 确定计数 -
如果我们知道您想对所有这些记录做什么,我们可以更好地帮助您找到解决方案。例如,如果结果实际上没有那么多行,那么您正在执行表扫描,并且简单的索引更改可能会使该查询立即返回。如果您确实有很多行,也许更改结果的顺序(即:完全忽略 order by),或者找到更好的方法来过滤它们会有所帮助。
-
您从哪里调用查询? SSMS? .NET 应用程序?别处?也可以试试
select count(1)而不是select count(*) -
SELECT TOP 1000 * FROM XYZ 需要多长时间? SELECT TOP 100000 * 怎么样?那些也超时吗?
标签: sql sql-server timeout