2012-01-18 68 views
0

我在Sql Server 2008中有表“TRANSACTION”。大约在1秒内插入了6条记录。 (因为它是财务交易表)因此,在1天内,插入了500.000条记录。 表每周进行分区。SQL Server - 使用GROUP BY查询大型表的性能

该表主要用于多种选择(当然是NOLOCK),插入,更新操作。

您是否认为在以下的查询可能会减慢其他关键选择,插入,更新操作在同一张表上?我认为,即使下面的查询持续时间过长,其他select查询也不会减慢,因为此查询不锁定表。但我无法确定,并向你问道。

请注意,选择列表中的列不在表格中编制索引。

SET @END_DATE = GETDATE() 

SET @START_DATE = DATEADD(HOUR, -24, @END_DATE) 

SELECT Column1, Column2, Column3, Column4, COUNT(*) FROM [TRANSACTION] WITH(NOLOCK) 
WHERE TRANSACTION_DATE BETWEEN @START_DATE AND @END_DATE 
GROUP BY Column1, Column2, Column3, Column4 

回答

3

运行在服务器上的任何查询将在你运行可以有正在执行的其他查询的影响本质上任何使用CPU /内存/ IO,所以。

您肯定会从您自己的数据中读取〜500k行,您可以计算出的行大小,甚至可以大致了解这些数据将存储在多少页上。您必须与查询计划进行交叉检查,以确保至少不会执行完整的分区扫描,否则会将350万行扫描到内存中。

这会让你在SLA之外吗?我们无法说明,只有您可以通过适当的负载测试来确定。

+0

该应用程序是合适的数据库服务器上运行。所以没有CPU或内存问题。我唯一不能确定的是,对于在同一张表上执行select,insert,update的其他查询可能会发生什么风险?任何dealocks或等待问题? – 2012-01-18 12:16:35

+0

NOLOCK发出1个锁,Sch-s - Schema Stability - 只阻止DDL运行该表。检查查询计划,不要低估对IO的影响,而不考虑CPU和内存 - IO往往是大多数系统中的瓶颈 – Andrew 2012-01-18 12:19:21

0

显然它或多或少放慢了服务器上的所有操作。

当查询持续时将锁定的唯一查询是针对您的表的模式更改查询。

我个人电子书籍您在列列1,列2,栏3,Column4,TRANSACTION_DATE到分组运行速度更快,这样创建索引:

CREATE INDEX iName on [TRANSACTION](Column1, Column2, Column3, Column4, Transaction_date)