2017-07-15 125 views
0

我使用这个SELECT Statment Select语句超过50万条记录

SELECT ID, Code, ParentID,... 
FROM myTable WITH (NOLOCK) 
WHERE ParentID = 0x0 

这Statment重复每15分钟(通过Windows服务)
当这个查询的问题是数据库变得缓慢向其他用户运行过程中出现。
在查询运行时避免性能下降的最佳方法是什么?

+1

你应该调查数据库变慢的原因是什么,查询能否得到改进,也许你认为每次你真的需要获取500k行,你在做什么? –

+0

如果您的主要目的是为了避免影响其他用户,请将'OPTION(MAXDOP 1)'提示添加到查询的末尾。如果您想加快查询速度,请在'ParentID'上添加一个索引以及选择列表中的列或将聚集索引更改为'ParentID'。 –

+0

@JamesZ通常该查询的结果大约是25条记录,但我必须使用该查询来查找它们。然后我有一些计算与其他数据库的结果。 – CodeGear

回答

0

为您的查询生成执行计划并检查它。

  • 是否为ParentId字段建立索引?
  • 有没有其他方法可以优化查询?

是否有可能提高托管SQL Server的服务器的性能?

  • 是否需要更多的磁盘或RAM?
  • 您是否有用于操作系统,数据,事务日志,临时数据库的单独驱动器(主轴)?

还有其他值得考虑的事情 - 您是否总是从您的应用程序中检索此表中最新的值,或者可能缓存先前的结果并在一段时间内使用这些值?

+0

ParentId字段是否已编入索引?是的,还有其他方法可以优化查询吗?我不知道这是我知道的唯一方法。不需要更多的RAM – CodeGear

+0

您是否生成并查看了查询的执行计划? – STLDeveloper

-1

似乎你的表有很多记录。您可以考虑实现按页面进行数据检索。您可以首先请求TOP 100行,然后有多个调用来获取其余数据。

我还不明白需要每15分钟运行一次这样的查询。您可能会想到实现一个可以执行大多数处理的存储过程并返回一小部分数据。如果它符合你的要求,这将是一个很好的改进。