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