gpt4 book ai didi

sql-server - 表值构造函数性能

转载 作者:行者123 更新时间:2023-12-01 21:41:46 29 4
gpt4 key购买 nike

我得到了使用表值构造函数选择一些静态值的简单查询:

SELECT c_id, c_type
FROM(VALUES
('8E0D2FD7-4D25-4FE5-8E01-8E07926E3D6B', 1),
('04FB3E91-3825-4EF3-B5A4-B42FBAEEE816', 1),
('8425047F-0DBD-463E-A7FE-EAE8812834CB', 1)) AS c(c_id, c_type);

如果你执行它,你会立即得到结果,但我的实际查询有超过 7000 对值,它在我的机器上运行超过 30 秒,它只是简单的持续扫描。有什么办法可以改善吗?不幸的是,我不允许重写这个查询(例如使用临时表)。它是这样的,问题是我可以做些什么来提高它的性能?

Execution plan

最佳答案

不幸的是,这是旧版本 SQL Server 中的错误。

它在编译过程中花费大量时间来计算不太可能对您有用的值的属性(并且这样做的效率也很低)。我调查了这个in my answer here .

您在问题中显示的执行计划有 8,001 行。以下是我安装的各种版本的 SQL Server ( script used ) 上该行数的解析和编译时间。花费的时间呈非线性增长,如果您使用的是 SQL Server 2014 之前的版本,与执行一批 8,000 行相比,将批处理大小减少到 1,000 行并执行 8 个不同的批处理会更好。

更好的做法是减少行数并使用参数代替文字值,因为这样就不会在编译时浪费时间检查这些值。

+-----------------------------------------------------------------------+-----------------------------------------------+
| Version | SQL Server parse and compile time: |
+-----------------------------------------------------------------------+-----------------------------------------------+
| Microsoft SQL Server 2008 (SP3) - 10.0.5890.0 (X64) | CPU time = 28000 ms, elapsed time = 28798 ms. |
| Microsoft SQL Server 2012 (SP3-GDR) (KB4019092) - 11.0.6251.0 (X64) | CPU time = 26203 ms, elapsed time = 26845 ms. |
| Microsoft SQL Server 2014 (RTM-CU14) (KB3158271) - 12.0.2569.0 (X64) | CPU time = 2796 ms, elapsed time = 2798 ms. |
| Microsoft SQL Server 2017 (RTM-CU17) (KB4515579) - 14.0.3238.1 (X64) | CPU time = 500 ms, elapsed time = 784 ms. |
| Microsoft SQL Server 2019 (RTM-CU2) (KB4536075) - 15.0.4013.40 (X64) | CPU time = 600 ms, elapsed time = 600 ms. |
+-----------------------------------------------------------------------+-----------------------------------------------+

关于sql-server - 表值构造函数性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61273659/

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