SQL查询 - 两个表之间的匹配数据
Posted
技术标签:
【中文标题】SQL查询 - 两个表之间的匹配数据【英文标题】:SQL query - matching data between two tables 【发布时间】:2016-08-22 12:42:44 【问题描述】:我有 2 张桌子,即;
在 TableA 中大约有 1000 万行, 在 TableB 中大约有 500k 行
TableA (10million rows)
Url
-------------------------------------------
http://www.example.com/data/tuesday-morning
http://www.example.com/data/wednesday-evening
TableB (500k rows)
Keyword Value
--------- ----------
Sunday 0
Monday 0
Tuesday 0
Wednesday 0
我想在TableA
中搜索TableB
中的所有关键字,并找到匹配项,将它们的Value
更新为1
。
我使用 MERGE,但问题是搜索至少需要 10 个小时。
我会每天进行搜索,因为 TableB
中的关键字每天都会更新
MERGE INTO TableB As TB
USING (Select Url From TableA) As TA
ON TA.Url LIKE 'http://www.example.com/data/'+TB.Keyword+'-%'
WHEN MATCHED THEN
UPDATE SET TB.Value=1;
在这两个表之间进行最快查找的最佳 SQL 查询是什么?
非常感谢
【问题讨论】:
摆脱(Select Url From TableA)
,这肯定会减慢您的查询速度,只使用TableA
使用这一行金额的唯一方法 - 使用全文索引。也就是说 - 采用 tinka (***.com/a/39080778/2746150) 下面提出的方法,但您必须将 like '%'+t2.keyword+'%'
替换为特定于全文索引的语言结构,这样更快。
【参考方案1】:
如果我了解您的 Q 可能这个解决方案会对您有所帮助,您可以通过 ID 或其他方式应用一些 WHERE
子句,这样您就可以纠正您的记录发生的情况,首先应用少量数据,然后您可以应用所有数据。
-- declare table1
declare @table1 table
(url varchar(max))
insert into @table1
values
('http://www.example.com/data/tuesday-morning'),
('http://www.example.com/data/tuesday-morning'),
('http://www.example.com/data/noday-morning')
-- declare table2
declare @table2 table
(keyword varchar(33), val int)
insert into @table2
values
('monday',0),
('tuesday',0)
-- select
select * from
@table1 t1 join
@table2 t2 on t1.url like '%'+t2.keyword+'%'
-- update
update
@table2
set val =1
from
@table1 t1 join
@table2 t2 on t1.url like '%'+t2.keyword+'%'
-- select again
select * from
@table1 t1 join
@table2 t2 on t1.url like '%'+t2.keyword+'%'
【讨论】:
以上是关于SQL查询 - 两个表之间的匹配数据的主要内容,如果未能解决你的问题,请参考以下文章