gpt4 book ai didi

sql-server - 大型查询的 SQL Server 性能

转载 作者:行者123 更新时间:2023-12-03 02:44:17 24 4
gpt4 key购买 nike

大家好,我对一些报告有几个查询,其中每个查询都从 35 个以上的表中提取数据。每个表有近100K条记录。例如所有查询都是 Union ALL

;With CTE
AS
(
Select col1, col2, col3 FROM Table1 WHERE Some_Condition
UNION ALL
Select col1, col2, col3 FROM Table2 WHERE Some_Condition
UNION ALL
Select col1, col2, col3 FROM Table3 WHERE Some_Condition
UNION ALL
Select col1, col2, col3 FROM Table4 WHERE Some_Condition
.
.
. And so on
)
SELECT col1, col2, col3 FROM CTE
ORDER BY col3 DESC

到目前为止,我只在开发服务器上测试了这个查询,我可以看到它需要时间才能得到结果。所有这些 35 个以上的表都彼此不相关,这是我能想到的在结果集中获取所有所需数据的唯一方法。

  1. 是否有更好的方法来执行此类查询?

  2. 如果这是进行此类查询的唯一方法,我该怎么办通过进行任何更改来提高此查询的性能,如果可能的??

我的意见
我不介意这份报告中有一些脏读。我正在考虑使用查询提示nolock或将事务隔离级别设置为READ UNCOMMITED

这些有帮助吗???

编辑
每个表都有 5-10 位列和每个位列的对应日期列,我对每个 SELECT 语句的条件类似于

WHERE BitColumn = 1 AND DateColumn IS NULL 

同行建议

过滤索引

CREATE NONCLUSTERED INDEX IX_Table_Column
ON TableName(BitColumn)
WHERE BitColum = 1

包含列的过滤索引

CREATE NONCLUSTERED INDEX fIX_IX_Table_Column
ON TableName(BitColumn)
INCLUDE (DateColumn)
WHERE DateColumn IS NULL

这是最好的方法吗?或者有什么建议请???

最佳答案

可以采取很多措施来加快速度。如果我假设您需要执行这些 UNION,那么您可以通过以下方式加快查询速度:

  1. 缓存结果,例如
    • 您可以根据整个语句创建索引 View 吗?或者有很多不同的 WHERE 条件,因此会有很多索引 View ?但要知道这会减慢对这些表的修改(插入等)
    • 你能用不同的方式缓存它吗?也许在中间层?
    • 可以提前重新计算吗?
  2. 创建覆盖索引。前导列是 WHERE 形式的列,然后是查询中作为包含列的所有其他列
    • 请注意,覆盖索引也可以被过滤,但如果查询中的 WHERE 将具有变量/参数,并且它们可能具有过滤索引未覆盖的值(即行),则不会使用过滤索引未涵盖)
  3. ORDER BY 将导致排序
    • 如果您可以缓存它,那就没问题 - 不需要排序(缓存已排序)
    • 否则,排序会受 CPU 限制(如果不在内存中,则会受 I/O 限制)。为了加快速度,您是否使用快速排序规则?最慢和最快排序之间的性能差异甚至可以达到 3 倍。例如,SQL_EBCDIC280_CP1_CS_AS、SQL_Latin1_General_CP1251_CS_AS、SQL_Latin1_General_CP1_CI_AS 是最快的排序规则之一。但是,如果我不知道您需要的排序规则特征,就很难提出建议
  4. 网络
    • 执行 SELECT 的连接的“网络数据包大小”应该是可能的最大值 - 如果结果集(行数)很大,则为 32,767 字节。这可以在客户端设置,例如,如果您在连接字符串中使用 .NET 和 SqlConnection。这将最大限度地减少从 SQL Server 发送数据时的 CPU 开销,并提高客户端和服务器端的性能。如果网络是瓶颈,这甚至可以将性能提高百分之几十
    • 如果客户端位于 SQL Server 上,则使用共享内存端点;否则 TCP/IP 可获得最佳性能
  5. 一般事物
    • 正如你所说,使用未提交读隔离级别会提高性能

...

除了重写查询等之外,您可能无法进行更改,但以防万一,添加更多内存以防现在不够,或者在内存功能中使用 SQL Server 2014 :-),...会肯定有帮助。

可以调整的东西太多了,但如果问题不是很具体,很难指出关键的东西。

希望这对您有所帮助

关于sql-server - 大型查询的 SQL Server 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19577203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com