比较两个数据库记录
有两个表,一个T1 1400万条记录,一个T2 800万数据。
字段有:
name,address,longitude,latitude
现在我要从T1中选出T2中重复的 和不重复的。
用程序怎么实现效率高?
const char* sql = "select name,address,longitude,latitude from T1";
const char* sql2 = "select name,address, longitude, latitude from T2";
MYSQL mysql;
MYSQL_RES *res,*res2;
mysql_init(&mysql);
mysql_real_connect(...);
mysql_query(&mysql,sql,NULL,0);
res = mysql_store_result(&mysql);
while(row=mysql_fetch_row(res))
{
mysql_query(&mysql,sql2,NULL,0);
res2 = mysql_store_result(&mysql);
while(row=mysql_fetch_row(res2))
{
...//作比较
}
mysql_free_result(res2);
}
mysql_free_result(res);
可是红色部分耗时比较长啊(不停的提交select请求),导致扫描1400万数据需要很长时间。
各位给些意见,不知道还有其他方法比较两张表没有????
------解决方案--------------------存储过程实现,把问题都交给数据库吧,没理由在前台用循环,这是个致命的思路
不管你是mysql还是MSSQL,肯定都不可取
------解决方案----------------------选择不重复的
select * from T1 except select * from T2
select * from T1 where not exists (select 1 from T2)
--选择重复的
select * from T1 where exists (select * from T2)
select * from T1 where T1.主键 in (select 主键 from T2)
------解决方案--------------------
------解决方案--------------------MSSQL解决方法:
SQL code
--T1中选出T2中重复的
SELECT * FROM T1 WITH(NOLOCK)
INTERSECT
SELECT * FROM T2 WITH(NOLOCK)
--T1中选出T2中不重复的
SELECT * FROM T1 WITH(NOLOCK)
EXCEPT
SELECT * FROM T2 WITH(NOLOCK)