0

我在 Sql Server 2008 中有表“TRANSACTION”。大约在 1 秒内将 6 条记录插入到该表中。(因为它是金融交易表)所以,在 1 天内,插入了 500.000 条记录。 表每周分区。

该表大量用于多种选择(当然是 N​​OLOCK)、插入、更新操作。

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

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

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
4

2 回答 2

3

在服务器上运行任何查询都将使用 CPU / 内存 / IO,因此本质上您运行的任何内容都会对正在执行的其他查询产生影响。

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

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

于 2012-01-18T12:12:00.400 回答
0

显然,它或多或少会减慢服务器上的所有操作。

在您的查询持续期间将被锁定的唯一查询是针对您的表的架构更改查询。

我个人建议您在列 Column1、Column2、Column3、Column4、Transaction_date 上创建索引以更快地运行分组,如下所示:

CREATE INDEX iName on [TRANSACTION](Column1, Column2, Column3, Column4, Transaction_date) 
于 2012-01-18T12:19:48.237 回答