现状:insert into B (ddd,eee) select A.ddd,A.eee from B left outer join A on B.ff = A.ff and B.gg = A.gg where b.ss is null and b.hh !=Z
主要想修改SQL文,减少查询量
12 个解决方案
#1
insert into B (ddd,eee)
select A.ddd,A.eee from A A
WHERE NOT EXISTS(SELECT 1 FROM B WHERE B.ff = A.ff and B.gg = A.gg And b.hh !='Z')
这样的吗>
插入时候,条件上有索引没,禁用非聚集索引
如果只是查一个表的数据用EXISTS效率高
#2
如A,B两个表,
当只显示一个表的数据如A,关系条件只一个如ID时,使用IN更快:
select * from A where id in (select id from B)
当只显示一个表的数据如A,关系条件不只一个如ID,col1时,使用IN就不方便了,可以使用EXISTS:
select * from A where exists (select 1 from B where id = A.id and col1 = A.col1)
当只显示两个表的数据时,使用IN,EXISTS都不合适,要使用连接:
select * from A left join B on id = A.id
所以使用何种方式,要根据要求来定。
刚小麦发的,呵呵
#3
目前两表都没有索引
#4
建个索引,循环处理完,索引删除就是了。
这种一次性操作又不是执行频率很高。
这种一次性操作又不是执行频率很高。
#5
insert into
B (ddd,eee)
select
A.ddd,A.eee from A A
WHERE
NOT EXISTS(SELECT 1 FROM B WHERE B.ff = A.ff and B.gg = A.gg And b.hh !='Z' and ss is not null)
#6
还是建立索引效率高点
#7
学习
#8
建立索引为快?为了检索数据使用?
#9
学习,谢谢
#10
学习
#11
100w对95w分批循环处理的时候, 可以想想没有索引的情况下,分批的意义有多大?
总共插入5w行,那么在索引处理上的消耗又会是多少?
#12
全都是些牛逼人啊。学习了。。
#1
insert into B (ddd,eee)
select A.ddd,A.eee from A A
WHERE NOT EXISTS(SELECT 1 FROM B WHERE B.ff = A.ff and B.gg = A.gg And b.hh !='Z')
这样的吗>
插入时候,条件上有索引没,禁用非聚集索引
如果只是查一个表的数据用EXISTS效率高
#2
如A,B两个表,
当只显示一个表的数据如A,关系条件只一个如ID时,使用IN更快:
select * from A where id in (select id from B)
当只显示一个表的数据如A,关系条件不只一个如ID,col1时,使用IN就不方便了,可以使用EXISTS:
select * from A where exists (select 1 from B where id = A.id and col1 = A.col1)
当只显示两个表的数据时,使用IN,EXISTS都不合适,要使用连接:
select * from A left join B on id = A.id
所以使用何种方式,要根据要求来定。
刚小麦发的,呵呵
#3
目前两表都没有索引
#4
建个索引,循环处理完,索引删除就是了。
这种一次性操作又不是执行频率很高。
这种一次性操作又不是执行频率很高。
#5
insert into
B (ddd,eee)
select
A.ddd,A.eee from A A
WHERE
NOT EXISTS(SELECT 1 FROM B WHERE B.ff = A.ff and B.gg = A.gg And b.hh !='Z' and ss is not null)
#6
还是建立索引效率高点
#7
学习
#8
建立索引为快?为了检索数据使用?
#9
学习,谢谢
#10
学习
#11
100w对95w分批循环处理的时候, 可以想想没有索引的情况下,分批的意义有多大?
总共插入5w行,那么在索引处理上的消耗又会是多少?
#12
全都是些牛逼人啊。学习了。。