【发布时间】:2019-05-17 12:32:16
【问题描述】:
我有一个名为 tbl_WHO 的表,有 9000 万条记录,而临时表 #EDU 只有 5 条记录。
我想对两个表(tbl_WHO 和#EDU)之间的名称字段进行模式匹配。
查询:以下查询需要 00:02:13 时间执行。
SELECT Tbl.PName,Tbl.PStatus
FROM tbl_WHO Tbl
INNER JOIN #EDU Tmp
ON
(
(ISNULL(PATINDEX(Tbl.PName,Tmp.FirstName),'0')) > 0
)
有时我必须对多个列进行模式匹配,例如:
SELECT Tbl.PName,Tbl.PStatus
FROM tbl_WHO Tbl
INNER JOIN #EDU Tmp
ON
(
(ISNULL(PATINDEX(Tbl.PName,Tmp.FirstName),'0')) > 0 AND
(ISNULL(PATINDEX('%'+Tbl.PAddress+'%',Tmp.Addres),'0')) > 0 OR
(ISNULL(PATINDEX('%'+Tbl.PZipCode,Tmp.ZCode),'0')) > 0
)
注意:有INDEX创建在条件列上。
还有其他方法可以调整查询性能吗?
【问题讨论】:
标签: sql-server tsql sql-server-2008-r2 query-performance