日期:2014-05-19  浏览次数:20967 次

菜鸟 求救我的数据库删除效率问题
我用的是Access数据库,库中有几个表   A,B,C
3个表都没有主键,但可根据其中的3个字段可确定一条记录
A,B,C   表中都有   年度,编号,修改时间   ,这3个字段可以唯一确定一条记录。  
A表为主表   我想删除B,C表中的记录,必须根据表A的条件  
我的AQL如下
delete   from   b   where   年度   in   (select   年度   from   a   where   +条件)and
                                        编号   in   (select   编号   from   a   where   +条件)and  
                                修改时间   in   (select   修改时间   from   a   where   +条件)
效率很慢
求救高手解决!!!!!!!!

------解决方案--------------------
尽量别用in操作,in的效率N慢。
------解决方案--------------------
建索引,不要用in,
------解决方案--------------------
应该改成

delete from b where (年度,编号,修改时间) in (select 年度,编号,修改时间 from a where +条件)

怎样写可以吗

------解决方案--------------------
没有主键, 还用多个使用 IN 的子查询,效率慢, 是正常的
------解决方案--------------------
以下语句通过:
delete b from a where 年度 = a.年度 and 编号 = a.编号 and 修改时间 = a.修改时间 + 其他条件

注意后面关联的表条件中,涉及到表b的字段前面不能加“表名. ",而涉及到a的则要加。

------解决方案--------------------
设主键和索引可以更快。如果应用中必须使用子查询,用in应该没有问题。
------解决方案--------------------
不要使用 in 改为效率高的 exists
------解决方案--------------------
up
------解决方案--------------------
exists的用法请参照下面的地址。
http://technet.microsoft.com/ZH-cn/library/ms188336.aspx
------解决方案--------------------
up