Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 优化where子句中包含UDF的查询_Sql_Sql Server_Database Performance - Fatal编程技术网

Sql 优化where子句中包含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

对于上述查询和以下表格统计信息:

1-50个包含字符串“XYZ_字符串”的项目。 项目表中的总记录为500K 将其转换为2个查询是否有益,其中第一个查询将执行字符串相等性检查,第二个查询将调用50多个记录上的UDF

不不会的。不过,在该列上建立索引会有很大帮助。 您使用的用户定义函数可以是内联的,它里面有查询还是其他什么?如果是这样的话,如果您的函数将是一个表值函数,并且您的查询将如下所示,那么查询将得到更好的优化:

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