PHP中如何更新大量的mysql数据 35
请教大哥大姐们一个问题,我想用php来更新mysql中的大量数据,每一行数据不一样,当前我是用循环来处理的,但是感觉这样效率太低下关键代码:for($i=0;$i<cou...
请教大哥大姐们一个问题,我想用php来更新mysql中的大量数据,每一行数据不一样,当前我是用循环来处理的,但是感觉这样效率太低下
关键代码:
for($i=0;$i<count($pointarr);$i++) //其中$pointarr是二维数组,此处取得个数
{
$sql= "UPDATE mydata SET p1='".$pointarr[i][1]."' where ps like '%".$pointarr[i][2]."%'"; //执行条件为数据库中ps字段与二维数组中第三个数一致的时候,更新第p1字段内容为数组第二个数(有点乱,不好意思)
mysql_query($sql);
}
目的是能达到,就是感觉效率不行,如果我的数组个数过多的话,将会导致反应不过来了,不知道哪位能帮出过注意,不用这么重复执行,从而提高效率,多谢了!
我是听说可以通过sql语句进行循环,但是不知道具体如何使用
我想在mysql里面直接循环处理的话,效率肯定比通过php来反复操作要高的多,不知道哪位高人能提醒一下??
=========
like '%".$pointarr[i][2]转化为where ps="..$pointarr[i][2]这样也是进行全表处理了吧?至于说先查出结果然后内存处理,最后再进行update 。。。where id=xxx 这样的话,是不是增加了更多的操作呢?而且也是每条都要循环处理?有点糊涂了
至于说设置索引?有点不明白如何下手了,见笑见笑,高手们指点小弟一下啊,万分感谢了 展开
关键代码:
for($i=0;$i<count($pointarr);$i++) //其中$pointarr是二维数组,此处取得个数
{
$sql= "UPDATE mydata SET p1='".$pointarr[i][1]."' where ps like '%".$pointarr[i][2]."%'"; //执行条件为数据库中ps字段与二维数组中第三个数一致的时候,更新第p1字段内容为数组第二个数(有点乱,不好意思)
mysql_query($sql);
}
目的是能达到,就是感觉效率不行,如果我的数组个数过多的话,将会导致反应不过来了,不知道哪位能帮出过注意,不用这么重复执行,从而提高效率,多谢了!
我是听说可以通过sql语句进行循环,但是不知道具体如何使用
我想在mysql里面直接循环处理的话,效率肯定比通过php来反复操作要高的多,不知道哪位高人能提醒一下??
=========
like '%".$pointarr[i][2]转化为where ps="..$pointarr[i][2]这样也是进行全表处理了吧?至于说先查出结果然后内存处理,最后再进行update 。。。where id=xxx 这样的话,是不是增加了更多的操作呢?而且也是每条都要循环处理?有点糊涂了
至于说设置索引?有点不明白如何下手了,见笑见笑,高手们指点小弟一下啊,万分感谢了 展开
4个回答
展开全部
可考虑kj23的思路.
=============
建索引解决不了你的问题.因为你的查询使用了双百分号查询 "%var%"
象这种以百分号开头的查询是无法使用索引的.
但 id=xxx这种操作肯定可以使用索引,特别是ID是主键的情况下.
==============
至于说先查出结果然后内存处理,最后再进行update 。。。where id=xxx 这样的话,是不是增加了更多的操作呢?而且也是每条都要循环处理?
用ID=xxx条件(我想kj23的意思是ID是主键),这效率可能比你的like更新要高些.
KJ的想法是你不要在循环中使用like更新,而是先把所有的要更新纪录查找出来.再按主键来更新.
具体要看你的数据量和查找是否方便了.
=============
mysql建索引的方法
create index 索引名 on 表名(字段名)
如:
create index idx_test on test(title)
删除索引:
drop index idx_test on test
=============
建索引解决不了你的问题.因为你的查询使用了双百分号查询 "%var%"
象这种以百分号开头的查询是无法使用索引的.
但 id=xxx这种操作肯定可以使用索引,特别是ID是主键的情况下.
==============
至于说先查出结果然后内存处理,最后再进行update 。。。where id=xxx 这样的话,是不是增加了更多的操作呢?而且也是每条都要循环处理?
用ID=xxx条件(我想kj23的意思是ID是主键),这效率可能比你的like更新要高些.
KJ的想法是你不要在循环中使用like更新,而是先把所有的要更新纪录查找出来.再按主键来更新.
具体要看你的数据量和查找是否方便了.
=============
mysql建索引的方法
create index 索引名 on 表名(字段名)
如:
create index idx_test on test(title)
删除索引:
drop index idx_test on test
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大量数据,又用like,最好不要交给mysql去做。给你个思路,把数据从mysql读出来(如果太多就分页读),在php里判断代替like,比如strpos。接下来再update...where id=xxx,就快多了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ps字段设置索引试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询