update b set b.prov=a.prov,b.city=a.city from a inner join b on  b.mobile = Substring(a.area,1,7)

解决方案 »

  1.   

    我现在已经将表(a)联通的数据全部删除了。有5万条。我不理解:
    1.选出手机号
    2.根据手机号选出号码段所在的位置
    3.更新此手机号码。分开在C语言里写,更新mysql的库,每分能更新30多W。怎么回事呢。
    那个库记录是500万的。
      

  2.   

    建议将b表分解一下,可以100万100万的更新,这样要比全部更新2000万条快的多,系统资源消耗也小,否则容易出现日志满的现象。另外索引对like是不起作用的
      

  3.   

    建议将b表分解一下,可以100万100万的更新,这样要比全部更新2000万条快的多,系统资源消耗也小,否则容易出现日志满的现象。另外索引对like是不起作用的
      

  4.   

    感觉SQLSERVER的效率并不是很高。
      

  5.   

    三、不可优化的where子句
    ---- 1.例:下列SQL条件语句中的列都建有恰当的索引,但执行速度却非常慢:
    select * from record where
    substring(card_no,1,4)='5378'(13秒)
    select * from record where
    amount/30< 1000(11秒)
    select * from record where
    convert(char(10),date,112)='19991201'(10秒)
    ---- 分析:
    ---- where子句中对列的任何操作结果都是在SQL运行时逐列计算得到的,因此它不得不
    进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么
    就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样:
    select * from record where card_no like
    '5378%'(< 1秒)
    select * from record where amount
    < 1000*30(< 1秒)
    select * from record where date= '1999/12/01'
    (< 1秒)
    ---- 你会发现SQL明显快起来!
      

  6.   

    建议将b表分解一下,可以100万100万的更新,这样要比全部更新2000万条快的多,系统资源消耗也小,否则容易出现日志满的现象。另外索引对like是不起作用的====================如果索引合理、内存够的话(500M以上)的话分不分表没有什么区别。对于like 'a%' 索引还是能起作用的。也就是第一个字符是固定的话索引就能起作用。
      

  7.   

    update b 
    set b.prov=a.prov,
        b.city=a.city 
    from b
    left outer loop join a
        on a.area = substring(b.mobile, 1, 7)
    where a.area is not null