优化在where子句中具有UDF的查询

时间:2014-04-11 15:17:45

标签: sql sql-server database-performance

SELECT *  FROM Items 
WHERE Items.StringColumn = 'XYZ_String' AND UserdefinedFunction(Id) = 1  

对于上述查询和表统计信息,例如:

  • 1-50个包含字符串'XYZ_String'的项目。
  • Items表中的总记录数量级为500K

将它转换为2个查询是否有益,其中第一个查询将执行字符串相等性检查,第二个查询将在50个记录上调用UDF?

2 个答案:

答案 0 :(得分:0)

  1. 不......它不会。获取该列的索引会有很大帮助。
  2. 您使用的用户定义函数可以内联(您在其中是否有查询或其他内容)?如果是这样,如果您的函数将是一个表值函数并且您的查询将如下所示,则查询将更好地优化:

    SELECT *  
    FROM Items i cross apply UserdefinedFunction(Id) ii 
    WHERE Items.StringColumn = 'XYZ_String' 
    AND   ii.value = 1
    

答案 1 :(得分:0)

进行查询并不好。是的,替代是你用子查询或内部查询替换udf

请查看此链接。

SQL UDF and query optimization

https://sqlserverfast.com/?s=user+defined+ugly