快速查询大数据量模糊查询,解决立结贴

renyiqiu 2017-08-21 03:22:01
1000万条文章数据表a ,字段title和content,2w个关键字表b,字段keyword,我想查询表a这两个字段命中表b关键字的数据,该如何快速查询呢
...全文
660 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
OwenZeng_DBA 2017-08-22
  • 打赏
  • 举报
回复
引用 9 楼 yenange 的回复:
[quote=引用 8 楼 renyiqiu 的回复:] .net有吗
elasticsearch.net 不过三两下也解决不了你的问题。 还要处理与数据库同步。 着急的话用#5的办法处理吧, 空间换时间。[/quote] 这确实是一个不错的办法,,只是开销稍微大点,,
吉普赛的歌 2017-08-22
  • 打赏
  • 举报
回复
引用 8 楼 renyiqiu 的回复:
.net有吗
elasticsearch.net 不过三两下也解决不了你的问题。 还要处理与数据库同步。 着急的话用#5的办法处理吧, 空间换时间。
renyiqiu 2017-08-22
  • 打赏
  • 举报
回复
引用 4 楼 zengertao 的回复:
[quote=引用 3 楼 renyiqiu 的回复:] [quote=引用 1 楼 sinat_28984567 的回复:] 试试这个:
SELECT  *
FROM    a
        JOIN b ON CHARINDEX(b.keyword, a.title) > 0
                  OR CHARINDEX(b.keyword, a.content) > 0
还是有点慢呢[/quote] 试试2#说的, Lucene好像要在程序里写。[/quote] .net有吗
「已注销」 2017-08-22
  • 打赏
  • 举报
回复
看都看不懂
繁花尽流年 2017-08-22
  • 打赏
  • 举报
回复
引用 5 楼 yenange 的回复:
create table a_b_match(
mId int identity(1,1) primary key,
aId int not null,
bId int not null,
title nvarchar(200) not null,
[content] nvarchar(max) not null,
[keyword] nvarchar(200) not null
)
insert into a_b(aId,bId,title,[content],[keyword])
select a.id,b.id,a.title,a.[content].b.[keyword]
from a inner join b on CHARINDEX(b.keyword, a.title) > 0
                  OR CHARINDEX(b.keyword, a.content) > 0
在 a 上创建触发器, 增、删、改时修改 a_b_match 的记录即可。 你想查啥, 直接查 a_b_match 表就可以了, 不用再查别的表。保证你快!
自己再衍生一批数据的话可以增量跑SP弄成作业,触发器还是能不能就不用了。除非实时要求真这么严谨。
二月十六 2017-08-21
  • 打赏
  • 举报
回复
引用 3楼我是你的主体 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:] 试试这个:
SELECT  *
FROM    a
        JOIN b ON CHARINDEX(b.keyword, a.title) > 0
                  OR CHARINDEX(b.keyword, a.content) > 0
还是有点慢呢[/quote]楼主说一下表的索引情况
吉普赛的歌 2017-08-21
  • 打赏
  • 举报
回复
create table a_b_match(
mId int identity(1,1) primary key,
aId int not null,
bId int not null,
title nvarchar(200) not null,
[content] nvarchar(max) not null,
[keyword] nvarchar(200) not null
)
insert into a_b(aId,bId,title,[content],[keyword])
select a.id,b.id,a.title,a.[content].b.[keyword]
from a inner join b on CHARINDEX(b.keyword, a.title) > 0
                  OR CHARINDEX(b.keyword, a.content) > 0
在 a 上创建触发器, 增、删、改时修改 a_b_match 的记录即可。 你想查啥, 直接查 a_b_match 表就可以了, 不用再查别的表。保证你快!
繁花尽流年 2017-08-21
  • 打赏
  • 举报
回复
引用 3 楼 renyiqiu 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:] 试试这个:
SELECT  *
FROM    a
        JOIN b ON CHARINDEX(b.keyword, a.title) > 0
                  OR CHARINDEX(b.keyword, a.content) > 0
还是有点慢呢[/quote] 试试2#说的, Lucene好像要在程序里写。
renyiqiu 2017-08-21
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
试试这个:
SELECT  *
FROM    a
        JOIN b ON CHARINDEX(b.keyword, a.title) > 0
                  OR CHARINDEX(b.keyword, a.content) > 0
还是有点慢呢
OwenZeng_DBA 2017-08-21
  • 打赏
  • 举报
回复
引用 楼主 renyiqiu 的回复:
1000万条文章数据表a ,字段title和content,2w个关键字表b,字段keyword,我想查询表a这两个字段命中表b关键字的数据,该如何快速查询呢
试试全文索引,或者开源的工具 Lucene 等
二月十六 2017-08-21
  • 打赏
  • 举报
回复
试试这个:
SELECT  *
FROM a
JOIN b ON CHARINDEX(b.keyword, a.title) > 0
OR CHARINDEX(b.keyword, a.content) > 0

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧