多语句 TVF 与内联 TVF 性能

2023-02-09
前端之家小编收集整理的多语句 TVF 与内联 TVF 性能内容,希望整理的这个开发编程问题多语句 TVF 与内联 TVF 性能能够快速解决!

代码问题

您的数字表是一堆,每次都可能被完全扫描。

添加一个集群主键Number并尝试以下forceseek提示以获得所需的搜索。

据我所知,此提示是必需的,因为 SQL Server 仅估计表的 27% 将匹配谓词(30% 用于 the <=,而 减少到 27% <>)。因此它只需要读取 3-4 行就可以找到匹配的行并且它可以退出半连接。所以扫描选项的成本非常低。但事实上,如果确实存在任何回文,那么它就必须读取整个表,所以这不是一个好的计划。

CREATE FUNCTION dbo.InlineIsPalindrome
(
    @Word NVARCHAR(500)
)
RETURNS TABLE
WITH SCHEMABINDING
AS RETURN (
    WITH Nums AS
    (
      SELECT
        N = number
      FROM
        dbo.Numbers WITH(FORCESEEK)
    )
    SELECT
      IsPalindrome =
        CASE
          WHEN EXISTS
          (
            SELECT N
            FROM Nums
            WHERE N <= L / 2
              AND SUBSTRING(S, N, 1) <> SUBSTRING(S, 1 + L - N, 1)
          )
          THEN 0
          ELSE 1
        END
    FROM
      (SELECT LTRIM(RTRIM(@Word)), LEN(@Word)) AS v (S, L)
);
GO

有了这些变化,它对我来说就飞了(需要 228 毫秒)

多语句 TVF 与内联 TVF 性能

问题答案

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:starryrocklee#gmail.com (将#修改为@)

如果觉得前端之家所整理的内容很不错的话,欢迎点击下方分享按钮,转发给身边开发程序员好友。

编程问答


CREATE FILE 遇到操作系统错误 5(访问被拒绝。)
如何在一个查询中删除具有公共前缀的多个表?
多语句 TVF 与内联 TVF 性能
由于可能丢失数据,无法转换该值
SQL Server 数据库不收缩