SQL Server并行查询性能降低

时间:2018-06-27 22:45:47

标签: sql 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

1 个答案:

答案 0 :(得分:1)

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

以下是分区表的好处-

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

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

Partitioned tables and indexes

How to partition an existing sql server table