大数据 批量查询问题

我有一张2000W数据的表 就一列都是手机号。(将来有可能过亿) 
现在有人提交1W个号码,怎么才能快速判断出手机号是否在这张表中  现在这样 直接迭代1W次共花费掉12000毫秒,我用IN了但是每次只能1K个号耗时100毫米 要是十次那就是1000毫秒 效率已经有了提供 希望能控制在100毫秒,另手机号字段已经建立了主键,如果在建立索引,会起作用吗?会提高效率吗? 
用内存的SET当然可以,有弊端,当过大时,效率也会降低,不利于维护,共享数据!测试本地5000KW,JVM暴了,只能加大JVM内存! 1000KW不是问题,但不能不考虑以后! 

最好MYSQL 或 oracle 数据库啊 太复杂的我不会!大家发的解决方案,我一定好好测试 

采用分区1W个手机号要查询好几次 去每个分区差 最后效率没有提高 

通过建立索引还没有解决  现在能达到500毫秒 

表分割的后果 按号段来存储134,135 带来后果,1W个号要查询多个表,按性能要求,平均下来查一个表要10毫秒搞定 有点难 

我只要能控制在100毫秒 就心满意足了

 

 

 

 

请量化你的“快速”的含义。并给出目前的查询性能状况,不然无法进行优化。如果是相对手工,那么怎么都算快的。

下面列出可能用得到的优化
1.给手机号这列增加索引
2.因为手机号是有号段的。比如134 135 139等等。可以先把1W条记录分拆成几个部分。比如开头3位,其实总数并不多。可以先提取出来进行排查。这样很快1W条就过滤掉不少了。然后继续几位几位逐渐过滤。还可以考虑给手机号字段增加函数索引,更加加快速度。
3合理规划表和索引的表空间

 

 

 

一般来说,对手机号建立索引就可以了,索引是很快的。
如果要求性能更高,在比较极端的情况下,可以直接把1千万手机号都放到内存里作为HashSet或HashMap,这样查询更快,不过维护内存中数据和表中一致要额外做些工作。

 

 

1.一万号码写入临时表
2.再调用merge语句(DB2,ORACLE都有该语法,其他数据库不清楚)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值