select * from non_bidders_report_view
where applicant_category_id =1314
and applicant_status_id not in(10,11)
and partner_id = 4
and applicant_status_id <> 6
and applicant_id not in (
Select apb.applicant_id
from applicant_property_bids apb
inner join applicants a on
a.applicant_id=apb.applicant_id
where to_date(apb.bid_Date) >= to_date('30/4/2012','dd/mm/yyyy')
and to_date(apb.bid_Date) <= to_date('30/4/2015','dd/mm/yyyy')
and a.partner_id = 4 group by apb.applicant_Id
union
select aba.applicant_Id from Archive_Bid_Applicants aba
inner join applicants a on a.applicant_id=aba.applicant_id
where to_date(aba.bid_Date) >= to_date('30/4/2012','dd/mm/yyyy')
and to_date(aba.bid_Date) <= to_date('30/4/2015','dd/mm/yyyy')
and a.partner_id = 4 group by aba.applicant_Id
);
-1
A
回答
1
你可以試試這個查詢:
select * from non_bidders_report_view nb
where applicant_category_id = 1314 and partner_id = 4
and applicant_status_id not in (6, 10, 11)
and not exists (
select 1 from applicant_property_bids abp
join applicants a on a.applicant_id=abp.applicant_id and a.partner_id=4
and abp.bid_Date between date '2012-04-30' and date '2015-04-30'
where abp.applicant_id = nb.applicant_id)
and not exists (
select 1 from archive_bid_applicants aba
join applicants a on a.applicant_id=aba.applicant_id and a.partner_id=4
and aba.bid_Date between date '2012-04-30' and date '2015-04-30'
where aba.applicant_id = nb.applicant_id)
的想法是擺脫group by
和union
這似乎是unnecesary這裏改變not in
到not exists
。
替代解決方案:
select * from non_bidders_report_view nb
where applicant_category_id = 1314 and partner_id = 4
and applicant_status_id not in (6, 10, 11)
and not exists (
select 1 from (
select applicant_id, bid_date from applicant_property_bids
union all
select applicant_id, bid_date from archive_bid_applicants
) ab
join applicants a on a.applicant_id=ab.applicant_id and a.partner_id=4
and ab.bid_Date between date '2012-04-30' and date '2015-04-30'
where ab.applicant_id = nb.applicant_id)
+0
非常感謝,它的工作。 –
+0
出於好奇 - 您選擇哪種查詢,現在運行多長時間? –
+0
@ Ponder Stibbons,我選擇了最後一個,執行時只需要5秒, –
0
相關問題
- 1. 如何優化此查詢,執行時間超過一分鐘
- 2. 查詢優化大約需要一分鐘的時間執行
- 3. SQL查詢優化 - 執行時間
- 4. 優化PSQL查詢的執行時間
- 5. 優化MySQL的查詢需要較長的執行時間大約4分鐘
- 6. 如何優化這個MySQL查詢,執行時間接近2秒
- 7. 這個查詢需要很多時間來執行,如何優化它?
- 8. 優化1分鐘執行的select查詢
- 9. 優化LINQ查詢 - 如何提高執行時間?
- 10. 如何優化SQL查詢執行時間
- 11. 如何優化SQL查詢來實現最小執行時間
- 12. 需要40分鐘時間的Jackrabbit查詢版本標籤
- 13. 如何優化此查詢?需要3分鐘才能運行
- 14. 如何優化這個需要很長時間的查詢。
- 15. 我如何優化這個花費很多時間的查詢?
- 16. mysql優化查詢執行
- 17. 如何優化這個慢速查詢?
- 18. 如何優化這個mysql查詢?
- 19. 如何優化這個查詢?
- 20. 如何優化這個linq查詢?
- 21. 如何優化這個慢速查詢?
- 22. 如何優化這個SQL查詢?
- 23. 如何優化這個查詢更多?
- 24. 如何優化這個查詢?
- 25. 如何優化這個sql查詢
- 26. 如何優化這個SQL查詢
- 27. 如何優化這個mysql查詢?
- 28. 如何優化這個MySQL查詢?
- 29. 如何優化這個怪物查詢
- 30. 如何優化這個LINQ查詢?
需要表模式,索引,解釋計劃等 – Mat
而不是'applicant_id不在()'中,使用'not exists'結構,應該更快。或者使用'JOIN'結構,可能會更快。 – HoneyBadger
@ HoneyBadger,謝謝先生,但'不存在'不起作用。 –