0
我在我的數據庫中使用了一個SP,我從之前的一個問題Date Intervals中重用了一個查詢開始日期和結束日期,並返回兩個日期之間的所有日期,然後我執行JOIN到我的訂單表。在MySql中存儲過程的性能
出於某種原因,與SP的查詢超過40秒,不到3秒而不使用SP。
我在這裏做了一些研究,這個答案表明字符集可能有一些事情要做。 SP Performance
歸類連接和數據庫歸類狀態分別爲utf8_general_ci和latin1_swedish_ci,表的歸類爲latin1_swedish_ci。
這裏是我的SQL
call make_intervals('2014-01-29 00:00:00','2015-03-03 00:00:00',1,'DAY');
SELECT
interval_start,
SUM(TenderedAmt) total
FROM time_intervals ti
LEFT JOIN tblorderheaders o
ON o.OrderDate = ti.interval_start AND (ClientId=35 or ClientId IS NULL) GROUP BY DATE(ti.interval_start) ORDER BY ti.interval_start ASC;
如果我執行下面的查詢需要0.2秒之內沒有JOIN由程序產生的表。
SELECT SUM(TenderedAmt) total FROM tblorderheaders WHERE ClientId=35 AND (OrderDate>='2014-01-29' AND OrderDate<='2015-02-27') GROUP BY DATE(OrderDate)
任何人都可以告訴爲什麼這個查詢需要這麼久嗎?
在此先感謝。
你好伴侶,也許沒有索引,並有一個人口稠密的表。 – Avidos 2015-03-02 05:05:38
謝謝。我有我的訂單表由主鍵組合,OrderId和ClientId以及ClientId索引。索引OrderDate是否值得? – 2015-03-02 05:08:18
'ClientId = 35',是否通常是存儲過程中的一個傳遞變量?即'ClientId = @ ClientId' – Simon1979 2015-03-02 05:20:51