【发布时间】:2018-01-28 01:23:22
【问题描述】:
我有一个这样的查询:
select PROMOTER_DSMID,
PROMOTER_NAME,
PROMOTER_MSISDN,
RETAILER_DSMID,
RETAILER_MSISDN,
RETAILER_NAME ,
ATTENDANCE_FLAG,
ATTENDANCE_DATE
from PROMO_ATTENDANCE_DETAILS
where PROMOTER_DSMID not in
(SELECT PROMOTER_DSMID
FROM PROMO_ATTENDANCE_DETAILS
WHERE PROMOTERS_ASM_DSMID='ASM123'
AND ATTENDANCE_FLAG='TRUE'
AND TRUNC(ATTENDANCE_DATE) ='16-07-17')
and PROMOTERS_ASM_DSMID='ASM123'
AND ATTENDANCE_FLAG='FALSE'
AND TRUNC(ATTENDANCE_DATE) ='16-07-17';
当我在 PROD 数据库中运行此查询时,由于大量记录,此查询花费了太多时间。
我需要为此编写一个程序,但我无法获得如何编写程序的正确方法。有人请指导我。
【问题讨论】:
-
为什么你认为一个程序会更快?查看执行计划,看看哪里慢。我想你的隐式日期转换和比较为字符串根本没有帮助。不过,使用
not in也会降低性能。您是否考虑过使用分析函数? -
我正在使用两个 select 语句,因此正在考虑编写一个 proc,其中内部 select 语句可以将数据放入某个临时表中,然后从该临时表中我可以运行外部 select 语句。通过这种方式,我可以删除 not in 调用。如果您能帮助我编写这样的过程,那将是非常有帮助的。
标签: oracle performance stored-procedures oracle11g