2
我試圖讓查詢更高效地運行並返回有效的結果。當我在特定列中包含COUNT函數時,我當前的查詢需要10多分鐘才能完成。我也注意到,在計數時,所有結果都返回爲NULL。查詢效率 - 計數
當我自己運行COUNT部分時,完成時間不到一秒鐘,我得到正確的結果。
這裏是我使用的查詢:
SELECT
x.entityCode 'Entity Code'
, (SELECT MAX(visit_date) AS secMaxDate FROM z_dev.entities_visited
WHERE entity_code = x.entityCode AND visit_date < x.maxDate) ' Previous Visit Date'
, x.maxDate 'Latest Visit Date'
, cycle_end_date 'Cycle End Date'
, total_visits 'Total Visits (28 Days)'
FROM
(SELECT
entity_code AS storeCode
, MAX(visit_date) AS maxDate
, MAX(cycle_end_date) AS cycle_end_date
, (SELECT COUNT(visit_date) FROM z_dev.entities_visited A
WHERE visit_date BETWEEN DATE(DATE_SUB(CURDATE(), INTERVAL 28 DAY)) AND DATE(DATE_SUB(CURDATE(), INTERVAL 0 DAY) AND A.entity_code = B.entity_code)
GROUP BY entity_code) AS 'total_visits'
FROM
z_dev.entities_visited B GROUP BY entity_code) AS X;
樣本數據
entity_code | visit_date | cycle_end_date
------------+------------+---------------
108792 |2016-12-07 |2016-12-11
108793 |2016-12-08 |2016-12-11
108795 |2016-12-06 |2016-12-11
108796 |2016-12-05 |2016-12-11
108795 |2016-12-13 |2016-12-18
108792 |2016-12-14 |2016-12-18
108793 |2016-12-14 |2016-12-18
108796 |2016-12-16 |2016-12-18
Field | Type | Key
----------------+-----------+---------------
entity_code |bigint(10) |MUL
visit_date |date |
cycle_end_date |date |MUL
的總訪問次數的計數是我添加到查詢解決方案,我與昨天輔助部分。基本上我想看到的是以下三件事情:
- 當被訪問了實體的最後日期(目前由 x.maxDate給出)
- 當是最後的實體之前,參觀人數最多最近 訪問(目前由「先前的訪問日期」定)
- 多少次是實體過去28天內
當前問題方面富有經驗訪問/結果
- 慢查詢時間(10分鐘+)
- 算子查詢返回的所有NULL值
- 數查詢運行在它自己的回報預期的結果在幾個預期結果在幾秒鐘內
- 主查詢返回秒
如果您可以讓我們知道您正在計算的內容,這將有所幫助。您當前的查詢看起來效率低下並且很混亂。也許我們可以給你一個更好的替代方案。 –
Gut反應表示確保你在'entities_visited'上有一個索引'(entity_code,visit_date DESC)',但是對於所有性能問題,你可以在你的查詢中發佈當前索引和'EXPLAIN'的結果? –
謝謝你們,我添加了一些額外的信息 –