日期:2014-05-17  浏览次数:20719 次

优化下SQL
SQL code
delete A a where not exists (select 1 from B d
     where a.id_no=d.id_no and d.use_number =1)


怎么让它执行的效率提高阿????
A表和B表都很大,大概都4千万的样子,A,B的ID_NO 都有索引,上面执行花了四个小时还是没跑出来...

请教了........

------解决方案--------------------
这个语句已经是最好的语法了,执行速度慢那是数据太大
------解决方案--------------------
整个语句的意思:
从A表中删除记录,条件是id_no在B表中不存在并且B表的number=1的记录

not exists表示在B表中不存在的id_no


------解决方案--------------------
要删除的数据量估计多大。

最好再加入一个关键性的条件,能够分段删除,及时递交。
------解决方案--------------------
分段删除,定时提交是个解决的办法

楼主可以分析下执行计划,看看哪一步耗时最长,再在上面想点办法
还有,能否把硬盘读写改为并行?
------解决方案--------------------
To flush DB buffer cache (DB blocks):
10g
alter system flush buffer_cache;
9i
alter session set events = 'immediate trace name flush_cache';

To flush shared pool (parsed SQls/PL/SQLs:

alter system flush shared_pool;