sql-server-2008 - 标量函数花费如此多的时间

标签 sql-server-2008 function scalar

我需要有人能告诉我我错过了什么。

我在 SQL Server 2008 中有这个标量函数:

ALTER function [dbo].[SKU](@id1 int, @id2 int)
returns int
begin
return (
 SELECT  SUM(Value)
 FROM Table
 where id_1 = @id1
 and id_2 = @id2)
end

表格是这样的:

 id_1      id_2    Value
 1004       1       10
 1004       1       30
 1004       2       100
 1005       1       90
 1005       1       5
 1005       1       5

如果我执行:

select [dbo].[SKU](1004,1)

它返回 40 - 没关系

select [dbo].[SKU](1004,2)

返回 100 - 确定

select [dbo].[SKU](1005,1)

返回 100 - 确定

此时一切似乎都正常,但我的表有近一百万行...SKU 的结果转到同一个表(更新部分)。

但是我现在运行了两个小时,并且仍在运行......

我的问题:我从未见过如此耗时的查询。没关系?我错过了什么吗?

谢谢!新年快乐! D:

最佳答案

如果无法更改表设计或对其进行编程,一个简单的解决方案是在函数中使用的字段上创建覆盖索引。

类似的东西

CREATE INDEX IX_TABLE_ID_1_ID_2_VALUE ON dbo.Table (id_1, id_2) INCLUDE (Value)

关于sql-server-2008 - 标量函数花费如此多的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663443/

相关文章:

SQL 查询 - 确保 () 中的每个值都存在一行

sql-server-2008 - GML 到 SQL 地理 - 24200 : The specified input does not represent a valid geography instance

Python 函数不应该更改全局变量

linq - 使用 BLToolkit 和 Linq 的标量函数

perl - 在 Perl 中对范围运算符 (..) 的结果调用 'scalar'

SQL 查询一天中的几个小时

sql-server-2008 - SQL Server 数据库角色

gql - Google 查询语言中的舍入

用于处理多个未知回调的 JavaScript 函数

python - 如何使用 python (3.2) 保存函数