日期:2014-05-16  浏览次数:20627 次

求一个高性能模糊查询电话号码的设计!请有经验的同志说说思路吧!!
有个电话号码的库,数据量其实并不大,只有80-100万,但是号码特别的不规范,类似于:
01088888888
010-88888888
(010)88888888
010_88888888
010 88888888
01088888888-888
(+86)01088888888
013888888888
13888888888
8613888888888
138 8888 8888
1388 888 8888
13888888888
013888888888
手机13888888888
本人电话13888888888
(以上并不全)

目前的服务器直接用like '%138%'查询的话,需要2-3s,我们现在想将查询响应时间降低到1s。我想通过分表的方法提高性能,可怎么分呢?按常用/不常用分不了,所有电话都是可能近期回电的,按号段又发现,136的特别多,158的特别少,总是分不很均匀。请教大伙了!有好的建议吗?

快过年了,祝大家马上有大的年终奖!!!
------解决方案--------------------
试试全文索引
------解决方案--------------------
因为你永远无法穷举会有多少种情景
------解决方案--------------------
原始数据问题较多。先整理下数据,然后做好索引, 百十来万,1s查找不是问题。

------解决方案--------------------
引用:
Quote: 引用:

版主大大,我这也是银行客户,对方牛B得不行,我们公司吃这口饭,硬气不起来啊  

本来我们是做电话通知的服务,现在等于是把数据清洗强制让我们做了,给一份钱干两份活,没辙~

--------回正题---------

现在的问题主要是IVR中客户等待的时间有点长,其实2-3秒很短啊,但是本着为客户提供更好体验的中心思想, 我在等待过程中播个友好的背景音乐吧。。。。

   没那么要强严格吧,<5秒应该都能忍


可以考虑试试用全文检索:

SQLserver2008全文检索使用方法
http://wenku.baidu.com/link?url=uBQ2bLQQL2RQr6v0hYNvXWE520bwtOhfkrOt8czhYD5kRL5eMUO9bsZwFHzh6_7MSV40muSf-iQJLQOqLWaYRHgYmZCsPuRbfw42cmtPyl_
------解决方案--------------------
碰到过类似的需求。当时使用的是一种折中方案。

太久记不起来了,大致如下

建立2个用于查询的中转表:固定电话、手机。
其中的数据规范化处理后再批量导入。

1、固定电话子表
ID,主键
ID_TRUE,用于指定母表(原始信息)的主键
区号,聚集索引
号码

2、手机号码子表
ID,主键
ID_TRUE,用于指定母表(原始信息)的主键
前7位号码,聚集索引。(因为前7位可以用于判断手机号码所属区域)
后4位号码。

业务处理流程,以查询固定电话为例
查询固定电话子表——得到ID_TRUE(也就是母表的主键)——再查询母表的详细信息。

大概这样吧,有点远的事,忘记细节了。