首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 谁是DBA 紧急求助 1300万数据的表 和 10万数据的表 进行子查询 [已结贴,结贴人:coderlee]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:10:44 楼主


    左边是一个表  1300万条数据 其中有一个手机号码字段
    右边是一个表  10万数据 是手机号段与号段地区的表

    我现在想来一个子查询  把手机号码  按照号段分类  然后插入到另外一个表  从而统计出这些手机号码是哪个地区的

    1300万数据 和 10万数据的两张表做子查询 你们做过吗  谁有良方?

    分不多了  就给帮个忙吧。。
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:14:351楼 得分:0
    就为了统计,没必要插入到另一个表,直接统计就行了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:17:362楼 得分:0
    SQL code
    select a.*, b.地区 from 左边 a join 右边 on a.手机号码 like b.手机号段 + '%'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:24:213楼 得分:0
    嗯  我也是像你上面写的那样

    1300万  你可能没试过  count一遍都要1分钟20秒

    可能是我机器的问题  闪龙2800+  1G内存
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:25:014楼 得分:0
    那你插入另一个表更慢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:26:155楼 得分:0
    嗯 可是没办法 还是要插的。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:27:016楼 得分:0
    可以考虑适当的冗余,在手机号码表加个地区字段,一次性UPDATE。
    以后加记录顺便把地区也一起放进去。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:29:217楼 得分:0
    嗯。。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:31:498楼 得分:40
    这样应该比你每次插入另一个表快

    还有就是通过触发器维护一张统计表(我以前也是这么做的),添加/删除/更新记录,都同时更新统计表。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:34:369楼 得分:0
    嗯  对了 如果是update的话 要怎么写sql语句了。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:36:4310楼 得分:0
    SQL code
    insert into tb_pns_analyse (phone,msghc,phonesegment,province,city,area) select pns.phone,pns.msghc,segment.phone,segment.province,segment.city,segment.area from tb_pns_logs as pns,phones.dbo.tb_phone as segment where charindex(segment.phone,pns.phone,0) > 0


    我以前这样写的 呵呵 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:37:0611楼 得分:0
    不过没敢运行 太慢了。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 19:33:5412楼 得分:0
    引用 2 楼 Limpire 的回复:
    SQL code select a.*, b.地区from左边 ajoin右边ona.手机号码likeb.手机号段+'%'


    只为统计根本就不用a.*用count(a.手机号码)就够了,这样可以快不少啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 19:35:1913楼 得分:0
    引用 6 楼 Limpire 的回复:
    可以考虑适当的冗余,在手机号码表加个地区字段,一次性UPDATE。
    以后加记录顺便把地区也一起放进去。


    1300万条记录被你这样折腾想必也要耗费不少空间,而且表空间和日志空间也要占用不少
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 19:37:2614楼 得分:0
    引用 13 楼 iamme81 的回复:
    引用 6 楼 Limpire 的回复:
    可以考虑适当的冗余,在手机号码表加个地区字段,一次性UPDATE。
    以后加记录顺便把地区也一起放进去。


    1300万条记录被你这样折腾想必也要耗费不少空间,而且表空间和日志空间也要占用不少


    说说你的高见
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 19:40:5115楼 得分:10
    数据量大的话楼主是否考虑用下索引呢?
    楼主不妨参考下
    http://blog.csdn.net/foxflyhigher/archive/2008/03/05/2148428.aspx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 19:42:0416楼 得分:30
    update 左边 set a.地区=b.地区 from  左边 a join 右边 b on a.手机号码 like b.手机号段 + '%'
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 19:48:4017楼 得分:0
    引用 14 楼 Limpire 的回复:
    引用 13 楼 iamme81 的回复:
    引用 6 楼 Limpire 的回复:
    可以考虑适当的冗余,在手机号码表加个地区字段,一次性UPDATE。
    以后加记录顺便把地区也一起放进去。


    1300万条记录被你这样折腾想必也要耗费不少空间,而且表空间和日志空间也要占用不少


    说说你的高见


    这些数据是不是在日常业务中都要用到,历史数据是否能传到同结构的历史表中内
    若能转的话可做到每张表的数据量不多,分批次统计到一张表中就行了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 20:00:0718楼 得分:0
    引用 15 楼 zhou968 的回复:
    数据量大的话楼主是否考虑用下索引呢?
    楼主不妨参考下
    http://blog.csdn.net/foxflyhigher/archive/2008/03/05/2148428.aspx

    估计索引找就建过了
    更新统计值
    或是做DBCC 等更为有效
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojuju10
    • 等级:
    发表于:2008-05-17 21:45:2119楼 得分:10

    建立索引应该不会很慢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mmcgzs
    • 等级:
    发表于:2008-05-17 21:56:0520楼 得分:10
    增加硬件设备,8g内存(增加缓存)+2*4核cpu(增加运算速度)+3块硬盘做RAD5(增加硬盘读写速度)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-19 10:07:0321楼 得分:0
    楼上的够强。。

    呵呵 我慢慢做吧  1300万 和 10万  两个表都建好索引了

    不过left jion一下  还是很慢的

    好像没有很好的解决方法  散分了。。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved