求一个高性能模糊查询电话号码的设计!请有经验的同志说说思路吧!!

一只熊猫 2014-01-20 04:37:07
有个电话号码的库,数据量其实并不大,只有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的特别少,总是分不很均匀。请教大伙了!有好的建议吗?

快过年了,祝大家马上有大的年终奖!!!
...全文
828 39 打赏 收藏 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿蚂蚁 2014-02-14
  • 打赏
  • 举报
回复
pborvb 2014-02-01
  • 打赏
  • 举报
回复
规则是必须有的,否则甲乙丙丁都出来
lifefamily11 2014-01-29
  • 打赏
  • 举报
回复
建议先寻找数据规律,批量进行数据规整。然后再建索引就快了。今后新添加数据,进新增数据前,过滤一下
白云任去留 2014-01-29
  • 打赏
  • 举报
回复
入库时就应该严格规范校验数据的格式!
hgwyl 2014-01-28
  • 打赏
  • 举报
回复
碰到过类似的需求。当时使用的是一种折中方案。 太久记不起来了,大致如下 建立2个用于查询的中转表:固定电话、手机。 其中的数据规范化处理后再批量导入。 1、固定电话子表 ID,主键 ID_TRUE,用于指定母表(原始信息)的主键 区号,聚集索引 号码 2、手机号码子表 ID,主键 ID_TRUE,用于指定母表(原始信息)的主键 前7位号码,聚集索引。(因为前7位可以用于判断手机号码所属区域) 后4位号码。 业务处理流程,以查询固定电话为例 查询固定电话子表——得到ID_TRUE(也就是母表的主键)——再查询母表的详细信息。 大概这样吧,有点远的事,忘记细节了。
lg314 2014-01-28
  • 打赏
  • 举报
回复
导入的时候做数据清洗是必要的,但我想这样的系统,如果需要即时查询(0.1s以内的响应速度,返回pv值最高的10条),应该要怎么实现?
jackylongchen 2014-01-28
  • 打赏
  • 举报
回复
KeepSayingNo 2014-01-21
  • 打赏
  • 举报
回复
想用户资料表单至少应该分为座机和手机吧,把这个分开录入然后查的时候都可以减少很多开销,另外号码前端验证,这个是最基本,建议还是弄上,怎么都不会出现“本人电话13888888888”奇葩的输入,呵呵
jason131203 2014-01-21
  • 打赏
  • 举报
回复
where charindex('133',字段)>0 比like ‘%133%’要高,试一下,看行不行
Yole 2014-01-21
  • 打赏
  • 举报
回复
录入的时候客户的既然不让动,你们就自己加一个规范后的号码,然后查询的时候用这个规范后的号码。
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
核心还是要规范列中数据类型,不然任何技术都是低效的(大量数据的前提下)
引用 19 楼 Going1981 的回复:
[quote=引用 17 楼 yupeigu 的回复:] [quote=引用 16 楼 Going1981 的回复:] [quote=引用 15 楼 DBA_Huangzj 的回复:] 把时间分摊在插入的过程中,比你在查询的过程中处理会好很多
谢谢!我就按这个思路解决![/quote] 你的意思是在插入数据的时候,通过正则表达式等方式,来实现分类?[/quote] 是的,不一定用正则,反正是分类储存,使查询范围尽可能小。[/quote]
一只熊猫 2014-01-21
  • 打赏
  • 举报
回复
引用 17 楼 yupeigu 的回复:
[quote=引用 16 楼 Going1981 的回复:] [quote=引用 15 楼 DBA_Huangzj 的回复:] 把时间分摊在插入的过程中,比你在查询的过程中处理会好很多
谢谢!我就按这个思路解决![/quote] 你的意思是在插入数据的时候,通过正则表达式等方式,来实现分类?[/quote] 是的,不一定用正则,反正是分类储存,使查询范围尽可能小。
Hope_f 2014-01-21
  • 打赏
  • 举报
回复
看走眼了,估计不会是吧。
Hope_f 2014-01-21
  • 打赏
  • 举报
回复
马萨嘎,难道那些垃圾短信制造者正在此地?...
jackylongchen 2014-01-21
  • 打赏
  • 举报
回复
HaoYuan 2014-01-21
  • 打赏
  • 举报
回复
先把数据进行归一化处理吧
發糞塗牆 2014-01-21
  • 打赏
  • 举报
回复
这个问题实际上是规则问题,不是查询问题,塞内存就可以解决?呵呵
三断笛 2014-01-21
  • 打赏
  • 举报
回复
先把数据整理好.要有规范.固话,手机规范好格式. 再建立索引,分区,分表,塞内存,怎么搞都不慢.
武江伟 2014-01-21
  • 打赏
  • 举报
回复
学习了
引用 14 楼 DBA_Huangzj 的回复:
[quote=引用 楼主 Going1981 的回复:] 有个电话号码的库,数据量其实并不大,只有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的特别少,总是分不很均匀。请教大伙了!有好的建议吗? 快过年了,祝大家马上有大的年终奖!!!
或者你做一个前端程序,导入过程中过滤一些不符合要求的数据,或者用前端语言的正则表达式来查找有用的信息,存到表里面,这样查询的时候估计可以秒杀[/quote] 学习了
七神之光 2014-01-21
  • 打赏
  • 举报
回复
加内存吧 都放内存里
加载更多回复(19)
内容概要:本文研究了计及需求侧响应的日前、日内两阶段鲁棒备用优化方法,旨在应对高比例可再生能源接入背景下电力系统中存在的不确定性问题。通过构建两阶段鲁棒优化模型,将日前调度作为第一阶段决策,日内调整作为第二阶段修正,充分考虑风电、光伏等出力波动以及负荷变化带来的影响。模型引入需求侧响应机制,利用可调节负荷参与系统备用,提升系统的灵活性与鲁棒性。采用列与约束生成(C&CG)算法对两阶段鲁棒优化问题进行求解,并通过Matlab编程实现,结合标准测试系统进行仿真分析,验证了所提方法在降低运行成本、提高可再生能源消纳能力和增强系统可靠性方面的有效性。; 适合人群:具备电力系统优化、运筹学及Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的专业技术人员。; 使用场景及目标:①应用于含高比例可再生能源的电力系统调度决策,提升调度方案的鲁棒性;②为需求侧资源参与电力系统备用提供建模与求解工具;③支撑科研教学中关于两阶段鲁棒优化、C&CG算法实现的学习与实践。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解流程,重点关注不确定性集合的刻画方式、需求侧响应的建模方法以及C&CG算法的迭代逻辑,宜配合相关优化理论资料进行系统学习。

34,876

社区成员

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

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