|
sql in Excel或者sql in access中,update 语句批量更新多条数据,怎么写才是最优的效率?
假如A表和B表结构相同,如下:
ID字段,数据字段1,数据字段2,数据字段N
其中,ID字段为主键(在access里有设置索引).数据字段有N列,N大于2小于20
假设现在,A表已有十万条数据;
B表有5万条数据,其中一万条是 A表没有的新的ID字段,两万条是A表已有但是至少有一个对应数据字段有变化的,还有两万条是A表有的但是所有数据字段都完全没有变化的.
现在要把B表新增的ID字段,有更新变化的ID字段,同步更新到A表,
sql语句要怎么写,才是效率最高的?
我目前的思路和写法:
第一步先把B表新增的插入到A表:
sql1="insert into A表 select B表.* from A表 left join B表 on A表.ID字段=B标.ID字段 where A表.ID字段 is null "
第二步,把B表的条目更新到A表
sql2=" update A表 inner join B表 on A表.ID字段=B表.ID字段 set A表.数据字段1=B表.数据字段1,A表.数据字段2=B表.数据字段2,A表.数据字段N=B表.数据字段N "
或者另一种写法:
sql3=" update A表 inner join B表 on A表.ID字段=B表.ID字段 set A表.数据字段1=B表.数据字段1,A表.数据字段2=B表.数据字段2,A表.数据字段N=B表.数据字段N where A表.数据字段1 <> B表.数据字段1 or A表.数据字段2 <> B表.数据字段2 or A表.数据字段N <> B表.数据字段N"
我的疑问:
1,有没有可能直接一句sql就搞定新增和更新? 前提是sql in Excel或者sql in access中.不是别的数据库软件.
2,第二步的两种写法哪种效率(主要是耗时更少)更高?
sql2相当于是直接把B表所有的都更新到A表,不管是否有变化,更新的条数应该是整个B表五万条.
sql3应该是,先where条件子句筛选出不相等的条目再更新到A表,更新的条数应该是两万条,但是我听说,where子句,用OR连接,会导致不走索引全表扫描而且毕竟要先做一个比较运算.那么sql2和sql3两种写法到底哪种效率更高呢?还有没有更优的写法呢?
|
|