编辑推荐:
本文来自于cnblogs,本文主要介绍了postgresql连接查询方式、优化思路、优化方案等相关知识。
一个优化的SQL:
SELECT order_date,
order_source,
SUM(commodity_num) num,
SUM(actual_charge) charge
FROM (
SELECT to_char(oc.create_date, 'yyyyMMdd') AS
order_date,
(CASE
WHEN oo.event_type = 'ONLINE_COMMODITY_ORDER'
THEN
'线上'
ELSE
'线下'
END) order_source,
oc.commodity_num,
oc.actual_charge actual_charge
FROM ord.ord_commodity_hb_2017 AS oc, ord.ord_order_hb_2017
AS oo
WHERE oc.order_id = oo.order_id
AND oc.op_type = 3 -- 3个值 ,3->5000 大概1/20的数据
AND oc.create_date BETWEEN '2017-02-05' AND '2017-12-07'
-- 无用
AND oc.corp_org_id = 106 -- 无用
AND oo.trade_state = 11 -- 3个值 11 --> 71万行,一半数据
AND oo.event_type IN (values('ONLINE_COMMODITY_ORDER'),
('USER_CANCEL'),
('USER_COMMODITY_UPDATE')) -- 大概1/10 数据
ORDER BY oc.create_date -- 如果业务不强制,最好去掉排序,如果不能去掉,最好等过滤数据量到尽量小时再排序
) T
GROUP BY order_date, order_source;
下面默认以postgresql为例:
一、排序:
1. 尽量避免
2. 排序的数据量尽量少,并保证在内存里完成排序。
(至于具体什么数据量能在内存中完成排序,不同数据库有不同的配置:
oracle