因ERP框架限制,很多地方必须使用表值函数,不能使用存储过程,同时查询返回的
数据多的时候有几千条,源表的数据量有的也有几十万条,导致表值函数中的表变量
在操作的时候速度很慢!
1.把表值函数重写为内联表值函数或将表值函数的结果存入临时表再进行Join可提升性能。如果表值函数只是返回一张表,则可以使用内联表值函数代替多语句表值函数,也可不使用自定义函数的语句。参考:https://m.imooc.com/article/details?article_id=26245
2、将CROSS APPLY改写成INNER JOIN ,以减少多语句表值函数的调用次数
3、对于和表值函数做Apply或表值函数返回的行数非常小的查询,或许并不影响。但对于返回结果较多的表值函数做Join,则可能产生性能问题,因此如果有可能,把表值函数重写为内联表值函数或将表值函数的结果存入临时表再进行Join可提升性能。
当然,不是所有的多语句表值函数都可以被改写,在优化时测试各种优化方案,寻找到一种最适合业务场景的方法。
标志函数为什么会有性能问题,参考:https://www.cnblogs.com/CareySon/p/4269897.html
PS:除英文字符以外的字符都将返回 0000,所以上面的方法 Difference() 的第二个示例会返回4(表示完全相同)。
Lower():用于返回指定英文字符串的小写形式的字符串。如果不为英文字符串,则返回原值。该方法有一个参数:
参数1:用于指定要转换为小写形式的字符串
select * from 视图
where 字段1 = 函数(值a)
或者:
select * from 视图
where 函数(字段1) = 值