php 处理每天几十万 近百万的 insert, update 语句 insert占少量 update 占绝大部分操作 大体上是 ,有一个页面 接受id和值 然后进行update操作 操作很简单 就是量大个人用墨迹数据测试了一下 速度灰常之慢请问谁有什么好的方法吗 (MySQL)

解决方案 »

  1.   

    确认条件语句涉及的字段上有索引
    如果不要求很强的实时性可以
    使用LOW_PRIORITY关键词,则UPDATE的执行被延迟了,直到没有其它的客户端从表中读取为止。
      

  2.   

    如果是asp 我可以把信息存到application里 然后1分钟一更新 也就是1分钟才操作一次数据库 php里有没有什么东西可以实现application的功能的? 不通过数据库或读写文件 对内存操作的模拟了一下几千条数据的insert和update php的速度真赶不上asp 如果只做循环 不操作数据库的话 是php快了些 求相助
      

  3.   

    几千条数据的insert和update
    这个和数据库关系比较大,和php asp关系不大
    如此大量的数据更改,为什么不使用redis之类的工具,定时同步?
      

  4.   


    $insql = 'insert into test(name,cont,stime) values (\'AAAAAAAAA\',\'ASDFWERQW\',now())';
    for($i=0;$i<10000;$i++){
       mysql_query($insql,$con);
    }for($i=0;$i<10000;$i++){
       $upsql = 'update test set name=id where id='.$i;
       mysql_query($upsql,$con);
    }
    mysqli的也试了 当然 insert时 "insert into tab_name(name,cont) values ('AA','AA'),('BB','BB'),('CC','CC')" 这样也试了 会快很多 但需求是一次一条
      

  5.   

    贴表结构看看。
    desc test;
      

  6.   

    这个只是用来测试的表 +-------+--------------+------+-----+---------+----------------+
    | Field | Type         | Null | Key | Default | Extra          |
    +-------+--------------+------+-----+---------+----------------+
    | id    | int(4)       | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(50)  | NO   |     | NULL    |                |
    | cont  | varchar(300) | NO   |     | NULL    |                |
    | stime | datetime     | YES  |     | NULL    |                |
    +-------+--------------+------+-----+---------+----------------+对了 是Win2003系统
      

  7.   

    其实操作就是 客户端会返回ID和值  如果表里没有这个ID就insert并赋值有的话 就update 叠加 
      

  8.   


    呵呵 我在上面说了 这个是模拟的表 真实的表会比这个字段多我用asp做了循环10000条 insert操作 3,4秒就完成了 php就直接超时了 把超时调到3分钟才勉强做完asp循环10000条 update操作也是5秒左右就完事 php 得40秒左右 不知道是我的写法有问题 还是win2003对mysql的支持不好
      

  9.   

    那就贴出真实表的表结构才好讨论。我怀疑你的php代码拖慢了时间。因此要找出问题,最好把关键的php代码也贴出来。
      

  10.   


    $tim = time();
    $con=mysql_connect("localhost", "root", "123456");
    if(!$con){
    echo "数据库连接失败!";
    exit;
    }
    mysql_select_db ("test",$con);
    for($i=1;$i<=1000;$i++){
    $insql = 'insert into test(name,cont,stime) values (\'AAAAAAAAAAAAAAAAAAAA\',\'ASDFWERQWERQWERASDFASDFASDF'.$i.'\',now())';
    mysql_query($upsql,$con);
    }
    mysql_close($con);
    echo time()-$tim;
    麻烦帮看下 asp同样的代码 真快了不知道多少这是asp代码 tim = timer()
    set conn=server.createobject("adodb.connection")
    conn.open "Provider=SQLOLEDB;Password=test;" & "Persist Security Info=True;User ID=test;" & "Initial Catalog=test;" & "Data Source=.;Connect Timeout=30" 
    if err.number<>0 then
    response.write("数据库连接失败!")
    end If
    for i=1 to 3000
    insql = "insert into test(name,cont,stime) values ('AAAAAAAAAAAAAAAAAAAA','ASDFWERQWERQWERASDFASDFASDF"&i&"',getdate())"
    conn.execute(insql)
    next
    conn.close
    set conn=nothing
    response.Write(timer()-tim)
      

  11.   

    应该说你的两段代码没有可比性
    1、mysql 只有十余年的历史,并且是开源产品。想和商品化的 sql server 一比还有待时日,况且我1990年入行时 sql server 已经是 5.5 了,少说也有二十多年历史了
    2、作为 ODBC 接口的 adodb 具有智能调度缓冲池的功能,而 mysql+php 并没有缓冲池的概念缓冲池的作用之一与 mysql 的 LOW_PRIORITY 关键字相当,你可以加上后再行测试
      

  12.   


    我没有要比较php+mysql好 还是asp+mssql好的意思 只是项目就是这个需求 刚学php不长时间 请教一下做法 
    LOW_PRIORITY 关键字没用过 试试后再来回复 先谢谢了
      

  13.   

    区区1万条插入和修改, mysql做3分钟不科学.....
      

  14.   

    win2003…………
    你的mysql版本是不是有点老了…………
    另外mysql在linux下的效率比在win的效率是数量级的提升……
      

  15.   

    如果及时我没办法
    如果数据不是需要及时的,可以把sql放入内存中..
    延迟更新
      

  16.   

    这个和数据库管理系统有关,与PHP或ASP关系不大。asp如果使用mysql应该和php会差不多。
    关于优化可以参考mysql的手册
    http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#update-speed
      

  17.   

    要加快update或insert速度,可以通过优化获得。
    关于优化可以参考mysql的手册
    http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#update-speed
      

  18.   

    楼主,我用你的方法,php,循环添加10000条记录,用时1秒
    win7 + iis7.5 + php 5.2.5 + mysql 5.0
      

  19.   

    我试了10000条数据。才1秒  我们用appsrv