有两张表
1.第一张,数量百万级
id number 主键
name varchar(50)
2.第二张,数量1万级
id number 主键
deletename varchar(50)
现在的问题是要写一个存储过程,删除第一张表中的name字段有在第二张表deletename中出现的记录,
怎么写性能最高啊,大家集思广义啊,小弟在此谢过了......
1.第一张,数量百万级
id number 主键
name varchar(50)
2.第二张,数量1万级
id number 主键
deletename varchar(50)
现在的问题是要写一个存储过程,删除第一张表中的name字段有在第二张表deletename中出现的记录,
怎么写性能最高啊,大家集思广义啊,小弟在此谢过了......
where exist
(
select 1
from b
where a.name=b.deletename)
表示出来的结果无所谓的
只有匹配值就返回
delete a
where exist
(
select 1
from b
where a.name=b.deletename )
2.
delete a
where a.name in
(
select b.deletename
from b
)
这两个,哪个性能高点
where a.name in
(
select deletename
from a,b
where a.name=b.deletename
);
where exist
(
select 1
from b
where a.name=b.deletename )
快些
效率会高很多。
exists只是验证存在性
第二张表中的数据量大的时候,用exists比较快