[英]query can't retrieve results on script but works fine with phpmyadmin page
[英]Query with more results works fine but with less results taking time
SELECT COUNT(*) AS ct
FROM TABLEA _tablea
LEFT OUTER JOIN
(SELECT DISTINCT CM_CASE_ID,
LOG_TIMESTAMP,
ACTION_PERFORMED_BY,
CASE_FOLLOW_UP_DATE,
ACTION_PICKLIST_ID,
CASE_REQUEST_NOTE_VALUE,
CASE_STATUS_ID,
RESOLUTION_PICKLIST_ID,
PREVIOUS_REQUEST_OWNER,
CURRENT_REQUEST_OWNER,
CASE_FOLLOW_UP_NOTE_VALUE,
CM_PENDING_REASON_ID,
ACCOUNT_STATUS
FROM TABLEB _tableb
WHERE _tableb.LOG_TIMESTAMP
||_tableb.CM_CASE_ID IN
(SELECT MIN(_tableb.LOG_TIMESTAMP)
||_tableb.CM_CASE_ID AS col_0_0_
FROM TABLEB _tableb
WHERE _tableb.CASE_STATUS_ID='A'
GROUP BY _tableb.CM_CASE_ID
)
) _tableb
ON _tablea.CM_CASE_ID=_tableb.CM_CASE_ID
WHERE _tablea.CASE_CREATION_DATE BETWEEN to_date('12/01/2016', 'mm/dd/yyyy') AND to_date('06/07/2017', 'mm/dd/yyyy') + 1
AND _tablea.CASE_REQUEST_TYPE IN (1,2,3)
AND _tablea.CASE_STATUS_ID IN ('A','B')
上面的查詢期望在2016年12月1日到2017年7月7日之間的記錄可以在更少的時間內正常工作
SELECT COUNT(*) AS ct
FROM TABLEA _tablea
LEFT OUTER JOIN
(SELECT DISTINCT CM_CASE_ID,
LOG_TIMESTAMP,
ACTION_PERFORMED_BY,
CASE_FOLLOW_UP_DATE,
ACTION_PICKLIST_ID,
CASE_REQUEST_NOTE_VALUE,
CASE_STATUS_ID,
RESOLUTION_PICKLIST_ID,
PREVIOUS_REQUEST_OWNER,
CURRENT_REQUEST_OWNER,
CASE_FOLLOW_UP_NOTE_VALUE,
CM_PENDING_REASON_ID,
ACCOUNT_STATUS
FROM TABLEB _tableb
WHERE _tableb.LOG_TIMESTAMP
||_tableb.CM_CASE_ID IN
(SELECT MIN(_tableb.LOG_TIMESTAMP)
||_tableb.CM_CASE_ID AS col_0_0_
FROM TABLEB _tableb
WHERE _tableb.CASE_STATUS_ID='A'
GROUP BY _tableb.CM_CASE_ID
)
) _tableb
ON _tablea.CM_CASE_ID=_tableb.CM_CASE_ID
WHERE _tablea.CASE_CREATION_DATE BETWEEN to_date('05/01/2017', 'mm/dd/yyyy') AND to_date('06/07/2017', 'mm/dd/yyyy') + 1
AND _tablea.CASE_REQUEST_TYPE IN (1,2,3)
AND _tablea.CASE_STATUS_ID IN ('A','B')
此查詢期望在05/01/2017到06/07/2017之間的記錄需要大約20分鍾的時間...
請幫忙,為什么期望更多結果的查詢可以正常工作,而更少則不能工作。
您正在使sql混淆。 像這樣將每個表作為CTE表放置:但是在應該修復的條件位置也很混亂。我建議將每個選擇放在單獨的CTE中,將每個JOIN條件放在ON部分中,將每個其他條件放在WHERE中,避免混合太多東西逐個選擇,在...上加入,然后按結果分組。 然后只需比較每個查詢的執行計划,您就會發現差異
;with cte_tablea as (
SELECT CM_CASE_ID, CASE_CREATION_DATE,
CASE_REQUEST_TYPE , CASE_STATUS_ID
FROM TABLEA )
,cte_tableb as (
SELECT DISTINCT CM_CASE_ID,
LOG_TIMESTAMP,
ACTION_PERFORMED_BY,
CASE_FOLLOW_UP_DATE,
ACTION_PICKLIST_ID,
CASE_REQUEST_NOTE_VALUE,
CASE_STATUS_ID,
RESOLUTION_PICKLIST_ID,
PREVIOUS_REQUEST_OWNER,
CURRENT_REQUEST_OWNER,
CASE_FOLLOW_UP_NOTE_VALUE,
CM_PENDING_REASON_ID,
ACCOUNT_STATUS
FROM TABLEB
)
SELECT COUNT(*) AS ct
FROM cte_tablea _tablea
LEFT OUTER JOIN
cte_tablea _tableb
on _tablea.CM_CASE_ID=_tableb.CM_CASE_ID
WHERE _tableb.LOG_TIMESTAMP
||_tableb.CM_CASE_ID IN
(SELECT MIN(_tableb.LOG_TIMESTAMP)
||_tableb.CM_CASE_ID AS col_0_0_
FROM TABLEB cte_tablea
WHERE _tableb.CASE_STATUS_ID='A'
GROUP BY _tableb.CM_CASE_ID
)
and _tablea.CASE_CREATION_DATE BETWEEN to_date('05/01/2017',
'mm/dd/yyyy') AND to_date('06/07/2017', 'mm/dd/yyyy') + 1
AND _tablea.CASE_REQUEST_TYPE
IN (1,2,3)
AND _tablea.CASE_STATUS_ID IN ('A','B')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.