Sql 优化where子句中包含UDF的查询
对于上述查询和以下表格统计信息: 1-50个包含字符串“XYZ_字符串”的项目。 项目表中的总记录为500K 将其转换为2个查询是否有益,其中第一个查询将执行字符串相等性检查,第二个查询将调用50多个记录上的UDF 不不会的。不过,在该列上建立索引会有很大帮助。 您使用的用户定义函数可以是内联的,它里面有查询还是其他什么?如果是这样的话,如果您的函数将是一个表值函数,并且您的查询将如下所示,那么查询将得到更好的优化:Sql 优化where子句中包含UDF的查询,sql,sql-server,database-performance,Sql,Sql Server,Database Performance,对于上述查询和以下表格统计信息: 1-50个包含字符串“XYZ_字符串”的项目。 项目表中的总记录为500K 将其转换为2个查询是否有益,其中第一个查询将执行字符串相等性检查,第二个查询将调用50多个记录上的UDF 不不会的。不过,在该列上建立索引会有很大帮助。 您使用的用户定义函数可以是内联的,它里面有查询还是其他什么?如果是这样的话,如果您的函数将是一个表值函数,并且您的查询将如下所示,那么查询将得到更好的优化: SELECT * FROM Items WHERE Items.Strin
SELECT * FROM Items
WHERE Items.StringColumn = 'XYZ_String' AND UserdefinedFunction(Id) = 1
提出质疑是不好的。是的,替代方法是用子查询或内部查询替换自定义项 请检查此链接
SQL Server应该足够聪明,能够短路,并且只在匹配字符串比较的行上运行UDF。您可以在StringColumn、UserdefinedFunctionId上添加一个索引,以保持查询的简洁和快速。您是否尝试过您的解决方案并对它们进行计时以进行比较?
SELECT *
FROM Items i cross apply UserdefinedFunction(Id) ii
WHERE Items.StringColumn = 'XYZ_String'
AND ii.value = 1