Chinaunix

标题: 如何快速的在Mysql数据库中的两个表比对数据并更新呢? [打印本页]

作者: chengxiao    时间: 2007-03-24 23:05
标题: 如何快速的在Mysql数据库中的两个表比对数据并更新呢?
刚用PHP与Mysql,我用的方法示意如下

  1. query(表1)
  2. while(rs)
  3. {
  4.      query(表2)
  5.      if(结果集为 empty) insert 表2
  6. }

复制代码


我在query(表1)的时候用了limit,每次500条(6万条记录),浏览器刷新比对下一个500条记录。。。
以上结构虽然可以完成,但发现Mysqld-nt的CPU占用率99%。。。

有没有更快,占用资源更少的方法呢?
作者: upandup    时间: 2007-03-24 23:53
结构一样的话直接拷贝最快了。
作者: chengxiao    时间: 2007-03-25 11:12
结构不一样,只需要表1中的一个字段到表2中。。。。
作者: olever    时间: 2007-03-25 18:26
建立第三个索引表如何?大家讨论。
作者: upandup    时间: 2007-03-26 03:22
可以在锁表后,一起执行insert操作,索引缓存一次性刷新到磁盘中。多次单独的insert语句就会有多次索引缓存刷新到磁盘中的开销。就是再你的循环前后加上lock tables 和 unlock tables,会节省一比开销。
有多个插入或更新时加锁会有更好的性能。
作者: 夜猫子    时间: 2007-03-26 12:44
如果存在唯一索引的字段A,表1.A = 表2.A
select * from 表1 where A not in (select A from 表2)
这就是你要的结果集
作者: chengxiao    时间: 2007-03-26 19:42
原帖由 夜猫子 于 2007-3-26 12:44 发表
如果存在唯一索引的字段A,表1.A = 表2.A
select * from 表1 where A not in (select A from 表2)
这就是你要的结果集



表1中的字段A不是唯一(允许为空)
作者: upandup    时间: 2007-03-26 21:41
不如你把两个表的结构拿出来看看。
作者: powerpolly    时间: 2007-03-27 10:27
楼主的办法确实感觉不太好。。。。。
作者: 夜猫子    时间: 2007-03-27 13:34
原帖由 chengxiao 于 2007-3-26 19:42 发表
表1中的字段A不是唯一(允许为空)

那你最好修改下你的数据库设计创造这样的字段




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2