我有一个查询如下(简化)......
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)