SQL Server 并发查询性能降低



我正在从SQL Server上具有大约400个连接的表中选择,每个连接选择该表的一部分并写入文件; select 语句使用表上的索引,每个独立运行 2.5 分钟。当我尝试使用 nolock 运行 400 个类似的查询时,总查询时间长达 40 分钟。有谁知道我可以在哪里进行优化,以将 400 查询的速度提高到与运行一个查询相同的速度?

为了更好地解释,以下是查询的示例:

SELECT * FROM TABLENAME WITH (NOLOCK)  WHERE Id BETWEEN 0 AND 1999999
SELECT * FROM TABLENAME WITH (NOLOCK)  WHERE Id BETWEEN 2000000 AND 3999999
SELECT * FROM TABLENAME WITH (NOLOCK)  WHERE Id BETWEEN 4000000 AND 5999999
.
.
.
SELECT * FROM TABLENAME WITH (NOLOCK)  WHERE Id BETWEEN 710000000 AND 711999999

在这种情况下,您可以使用表分区来优化查询性能。分区表比唯一的索引表非常高效和快速。 因此,请为 ID 列创建Partition SchemaPartition Function

以下是分区表的好处 -

  • 您可以快速高效地传输或访问数据子集,同时保持数据收集的完整性。例如,将数据从 OLTP 加载到 OLAP 系统等操作只需几秒钟,而不是数据未分区时的操作所花费的分钟和小时。
  • 您可以更快地对一个或多个分区执行维护操作。这些操作效率更高,因为它们仅针对这些数据子集,而不是整个表。例如,您可以选择压缩一个或多个分区中的数据,或者重建索引的一个或多个分区。
  • 您可以根据经常运行的查询类型和硬件配置提高查询性能。例如,当表中的分区列相同时,查询优化器可以更快地处理两个或多个分区表之间的等联接查询,因为分区本身可以联接。

以下链接可能对您有所帮助。

分区表和索引

如何对现有 SQL 服务器表进行分区

最新更新