菜鸟 求救我的数据库删除效率问题
我用的是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