DBA_Huangzj、阳泉酒家小当家,关于2表模糊搜索匹配的问题已解决

AMinfo 2014-01-01 12:53:30
DBA_Huangzj、阳泉酒家小当家,非常感谢你们的帮忙,先祝你们新年快乐!

关于2个表模糊搜索匹配的问题,现已找到较快的解决方法,速度提升到每秒5条记录左右,而且不占CPU,不占内存,方法如下:
-------------------------------------------------------------------------
环境:
有2个表,
表1:MainTable (现有记录数在10万条左右)
字段:
id bigint自动编号
Title nvarchar(30)
SubId nvarchar(max)

表MainTable:
Id Title SubId
1 A 0
2 B 0
3 C 0
4 D 0
5 E 0
6 F 0

表2:SubTable (现有记录数在300万条左右)
字段:
id bigint自动编号
Description nvarchar(100)
Fl int '默认值为0,当进行模糊匹配后,值改为1

表SubTable:
Id Description Fl
1 ABC 0
2 AB 0
3 CD 0
4 EA 0

二、需要实现的结果为:
表MainTable:
Id Title SubId
1 A 0,1,2,4
2 B 0,1,2
3 C 0,1,3
4 D 0,3
5 E 0,4
6 F Null

第6条记录由于没有匹配的值,所以改为Null
-------------------------------------------------------------------------

1、由于记录数太多,通过内部存储搜索速度太慢,中途不能暂停,平均每分钟才能处理5条记录左右;
2、原先通过外部循环的方法处理,速度1秒1条左右,会比方法1速度快,但非常占CPU;

现在的办法:
用VBS编写,定义2个数组,IDArray()和DescriptionArray()分别用于存储在SubTable表检索到的ID集和Description集
1、MainTable用循环的方式,按字段Title升序的方式得取Title字段的值,
先取得第一条记录的Title字段的第一个字符,根据这个字符模糊匹配SubTable的Description字段,并将检索到的结果存放在数组IDArray和DescriptionArray()中,
2、通过循环方式,将MainTable表的当前记录的Title字段的完整值与DescriptionArray()的值进行匹配处理,并update;
3、获取MainTable的下一条记录,判断该条记录Title字段的第一个字符是否与上一条记录的Title的第一个字符相同,如果相同,则从第2步开始处理;如果不同,则从第1步开始处理。

------------------------------------------------------------------------------
这种方法减少了每次去SubTable模糊搜索的次数,如果Title字段的第一个字符相同的记录非常多的情况下,速度还可能会提高很多。
...全文
244 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AMinfo 2014-01-02
  • 打赏
  • 举报
回复
目前运行单个程序处理速度可达到10个/秒
發糞塗牆 2014-01-02
  • 打赏
  • 举报
回复
学习,蹭分
AMinfo 2014-01-01
  • 打赏
  • 举报
回复
另外,在不占CPU的情况下,可以同时运行多个vbs程序同时处理,如果一次同时运行5个vbs,那么处理的速度可以达到1秒25个左右。
orochiheart 2014-01-01
  • 打赏
  • 举报
回复
新年快乐!
ChinaITOldMan 2014-01-01
  • 打赏
  • 举报
回复
借地也顺便感谢“DBA_Huangzj、阳泉酒家小当家”两位长期的帮助与指点,祝大家元旦快乐!
LongRui888 2014-01-01
  • 打赏
  • 举报
回复
呵呵,总结一下,这个问题的解决不是通过sql server,而是在vbs,通过运用数据本身的特性,也就是:Title字段的第一个字符相同的记录非常多,减少了重复的劳动,少做了很多的无用功,最后,大幅提升性能。 真的是好办法,其实,从这个例子中可以看出,优化,更重要的是强调思维,而不简单的是某个技术,注重细节,仔细分析,楼主就解决了这个优化问题
LongRui888 2014-01-01
  • 打赏
  • 举报
回复
呵呵,好办法 新年快乐哈

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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