sql – 在巨大的插入运行时选择百万条记录

我试图从单个表中提取应用程序日志文件. select查询语句非常简单.

select top 200000 * 
from dbo.transactionlog 
where rowid>7 
and rowid <700000 and 
Project='AmWINS' 

上述选择的查询时间超过5分钟.它被认为是长的吗?当select正在运行时,批量插入也在运行.

[编辑]

实际上,我在当前的生产日志数据库中遇到了严重的问题,
基本上,我们只有一个表(transactionlog).所有应用程序日志都将插入此表中.对于像AmWINS这样的项目,根据选择计数结果,我们每天插入大约800K记录.记录的插入每天24小时在生产环境中运行.如果用户想要检查事务日志,则用户希望从表中提取数据.因此,如有必要,我们需要从表中选择记录.

我尝试在UAT环境中进行模拟,按照生产计算,直到今天已经增长到1000万个记录.当我尝试提取记录的同时,我使用批量插入进行模拟,使其看起来像生产环境.花了5分钟才拿出200k的记录.

在提取运行期间,我监视SQL phyiscal服务器CPU的峰值高达95%.

这些表有13个字段,并且使用bigint打开身份(rowid). rowid是PK.
索引是在Date,Project,module和RefNumber上创建的.
这些表是在rowlock和pagelock上启用的.
我正在使用SQL Server 2005.

希望你们能给我一些专业的建议来启发我.谢谢.

最佳答案 您可以使用“Nolock”表提示,如下所述:

Table Hints MSDN

你的SQL会变成这样:

select top 200000 * from dbo.transactionlog with (no lock) ...

如果您不关心返回数据的完整准确性,这将获得更好的性能.

点赞