小编Dav*_*rts的帖子

SQL字符串比较速度'喜欢'与'patindex'

我有一个查询如下(简化)......

SELECT     *
FROM       table1 AS a
INNER JOIN table2 AS b ON (a.name LIKE '%' + b.name + '%')
Run Code Online (Sandbox Code Playgroud)

对于我的数据集,这需要大约90秒才能执行,因此我一直在寻找加速它的方法.没有充分的理由,我以为我会尝试PATINDEX而不是LIKE ......

SELECT     *
FROM       table1 AS a
INNER JOIN table2 AS b ON (PATINDEX('%' + b.name + '%', a.name) > 0)
Run Code Online (Sandbox Code Playgroud)

在相同的数据集上,它在眨眼间执行并返回相同的结果.

谁能解释为什么LIKE比PATINDEX慢得多?鉴于LIKE只是返回一个BOOLEAN,而PATINDEX正在返回实际位置,我预计后者会变慢,如果有的话,或者仅仅是两个函数编写效率的问题?

好的,这里是完整的每个查询,然后是执行计划."#StakeholderNames"只是我正在匹配的可能名称的临时表.

我已经撤回了实时数据并多次运行每个查询.第一个是花费大约17秒(比实际数据库中的原始90秒小一些),第二个小于1秒......

SELECT              sh.StakeholderID,
                    sh.HoldingID,
                    i.AgencyCommissionImportID,
                    1

    FROM            AgencyCommissionImport AS i
    INNER JOIN      #StakeholderNames AS sn ON REPLACE(REPLACE(i.ClientName,' ',''), ',','') LIKE '%' + sn.Name + '%'
    INNER JOIN      Holding AS h ON (h.ProviderName = i.Provider) AND …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server string performance

15
推荐指数
1
解决办法
1万
查看次数

标签 统计

performance ×1

sql ×1

sql-server ×1

string ×1

t-sql ×1