php 处理每天几十万 近百万的 update 语句 php 处理每天几十万 近百万的 insert, update 语句 insert占少量 update 占绝大部分操作 大体上是 ,有一个页面 接受id和值 然后进行update操作 操作很简单 就是量大个人用墨迹数据测试了一下 速度灰常之慢请问谁有什么好的方法吗 (MySQL) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 确认条件语句涉及的字段上有索引如果不要求很强的实时性可以使用LOW_PRIORITY关键词,则UPDATE的执行被延迟了,直到没有其它的客户端从表中读取为止。 如果是asp 我可以把信息存到application里 然后1分钟一更新 也就是1分钟才操作一次数据库 php里有没有什么东西可以实现application的功能的? 不通过数据库或读写文件 对内存操作的模拟了一下几千条数据的insert和update php的速度真赶不上asp 如果只做循环 不操作数据库的话 是php快了些 求相助 几千条数据的insert和update这个和数据库关系比较大,和php asp关系不大如此大量的数据更改,为什么不使用redis之类的工具,定时同步? $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')" 这样也试了 会快很多 但需求是一次一条 贴表结构看看。desc test; 这个只是用来测试的表 +-------+--------------+------+-----+---------+----------------+| 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系统 其实操作就是 客户端会返回ID和值 如果表里没有这个ID就insert并赋值有的话 就update 叠加 呵呵 我在上面说了 这个是模拟的表 真实的表会比这个字段多我用asp做了循环10000条 insert操作 3,4秒就完成了 php就直接超时了 把超时调到3分钟才勉强做完asp循环10000条 update操作也是5秒左右就完事 php 得40秒左右 不知道是我的写法有问题 还是win2003对mysql的支持不好 那就贴出真实表的表结构才好讨论。我怀疑你的php代码拖慢了时间。因此要找出问题,最好把关键的php代码也贴出来。 $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) 应该说你的两段代码没有可比性1、mysql 只有十余年的历史,并且是开源产品。想和商品化的 sql server 一比还有待时日,况且我1990年入行时 sql server 已经是 5.5 了,少说也有二十多年历史了2、作为 ODBC 接口的 adodb 具有智能调度缓冲池的功能,而 mysql+php 并没有缓冲池的概念缓冲池的作用之一与 mysql 的 LOW_PRIORITY 关键字相当,你可以加上后再行测试 我没有要比较php+mysql好 还是asp+mssql好的意思 只是项目就是这个需求 刚学php不长时间 请教一下做法 LOW_PRIORITY 关键字没用过 试试后再来回复 先谢谢了 区区1万条插入和修改, mysql做3分钟不科学..... win2003…………你的mysql版本是不是有点老了…………另外mysql在linux下的效率比在win的效率是数量级的提升…… 如果及时我没办法如果数据不是需要及时的,可以把sql放入内存中..延迟更新 这个和数据库管理系统有关,与PHP或ASP关系不大。asp如果使用mysql应该和php会差不多。关于优化可以参考mysql的手册http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#update-speed 要加快update或insert速度,可以通过优化获得。关于优化可以参考mysql的手册http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#update-speed 楼主,我用你的方法,php,循环添加10000条记录,用时1秒win7 + iis7.5 + php 5.2.5 + mysql 5.0 我试了10000条数据。才1秒 我们用appsrv mysql导出身份证到EXCEL为科学计数法,怎么办? 求助 易宝支付接口测试问题--PHP 织梦中的标记不能嵌套,那怎么解决我这个问题(请进)! php文件include静态文件,效果跟直接访问静态文件一样吗 str_replace 中文替换有乱码问题 发布一个PHP扩展,读取纯真数据库 EBL特价双线cPanel主机只要28块钱!!! 有没有可以抓取用disuz模版搭建论坛的网页的工具? 自己搞了一个星期了,也没成功,求救给出解密后源码! 跨域名发送ajax可以吗 php调用c程序 请问下谁有韩顺平的图片素材?
如果不要求很强的实时性可以
使用LOW_PRIORITY关键词,则UPDATE的执行被延迟了,直到没有其它的客户端从表中读取为止。
这个和数据库关系比较大,和php asp关系不大
如此大量的数据更改,为什么不使用redis之类的工具,定时同步?
$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')" 这样也试了 会快很多 但需求是一次一条
desc test;
| 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系统
呵呵 我在上面说了 这个是模拟的表 真实的表会比这个字段多我用asp做了循环10000条 insert操作 3,4秒就完成了 php就直接超时了 把超时调到3分钟才勉强做完asp循环10000条 update操作也是5秒左右就完事 php 得40秒左右 不知道是我的写法有问题 还是win2003对mysql的支持不好
$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)
1、mysql 只有十余年的历史,并且是开源产品。想和商品化的 sql server 一比还有待时日,况且我1990年入行时 sql server 已经是 5.5 了,少说也有二十多年历史了
2、作为 ODBC 接口的 adodb 具有智能调度缓冲池的功能,而 mysql+php 并没有缓冲池的概念缓冲池的作用之一与 mysql 的 LOW_PRIORITY 关键字相当,你可以加上后再行测试
我没有要比较php+mysql好 还是asp+mssql好的意思 只是项目就是这个需求 刚学php不长时间 请教一下做法
LOW_PRIORITY 关键字没用过 试试后再来回复 先谢谢了
你的mysql版本是不是有点老了…………
另外mysql在linux下的效率比在win的效率是数量级的提升……
如果数据不是需要及时的,可以把sql放入内存中..
延迟更新
关于优化可以参考mysql的手册
http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#update-speed
关于优化可以参考mysql的手册
http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#update-speed
win7 + iis7.5 + php 5.2.5 + mysql 5.0