两个表
一个手机号段表 有起始号码 结束号码 对应的省市
一个手机号码表 数据比较多 几万条统计手机号码来自各个省市的数量如何提高速度

解决方案 »

  1.   

    select a.省,a.市,count(b.*) from 
    手机号段表 a,手机号码表 b
    where a.手机号=b.手机号
    and b.手机号>=a.起始号码 and b.手机号<=a.结束号码
    group by a.省,a.市
      

  2.   

    写错了:
    select a.省,a.市,count(b.*) from 
    手机号段表 a,手机号码表 b
    where  b.手机号>=a.起始号码 and b.手机号<=a.结束号码
    group by a.省,a.市
      

  3.   

    1. 使用索引
    2. 正确使用查询语句:
    如楼上:
    select a.省,a.市,count(b.*) from 
    手机号段表 a,手机号码表 b
    where a.手机号=b.手机号
    and b.手机号>=a.起始号码 and b.手机号<=a.结束号码
    group by a.省,a.市
      

  4.   

    或者这样:
    select c.省,c.市,count(c.*) from
    (
    select a.省,a.市,b.手机号
    from 手机号段表 a 
    left join 手机号码表 b on
    b.手机号>=a.起始号码 and b.手机号<=a.结束号码
    ) c
    group by c.省,c.市这两种方法你试一下,我觉得后一种好一些。
      

  5.   

    没有验证,仅供参考
    有起始号码 结束号码 如果存在规律,比如左5位相同的,且和其他城市不同的
    select count(*) as shuliang from table2 as t2  group by substring(t2.手机号码,1,5) left join table1 as t1 on substring(t2.手机号码,1,5)=substring(t1.起始号段,1,5)