1. 程式人生 > 其它 >mysql left 查詢 優化的思考

mysql left 查詢 優化的思考

mysql left 查詢 優化的思考:

 

1.對左表新增條件限制需在where條件中新增,不能放到on後面
2.對右表新增條件限制需放到on後面,在where條件中新增會有資料行數差異出現問題。

 

原sql語句:

SELECT m.*,o.OrderSourceName
FROM table_1 m
Left JOIN table_2 o ON m.CustomerId = o.CustomerId AND m.OrderSourceId = o.OrderSourceId
WHERE m.CustomerId=1 AND m.MarketId=1 AND m.Date>=20220328 AND m.Date<=20220411
ORDER BY m.Id DESC

 

 

mysql優化:
1. left 查詢,可以先根據查詢條件查詢出主表的id等left join 條件資料,縮小資料的範圍,在left 查詢
2. m.CustomerId=1 AND m.MarketId=1 表裡的資料都一樣可以去掉,以免影響索引查詢;
3. 查詢條件單一的,可以強制索引force index(idx_date)

 

優化後的語句:
select m.Id,m.CustomerId,m.OrderSourceId,o.OrderSourceName from
(
select Id, CustomerId,OrderSourceId from table_1 force index(idx_date) WHERE Date>='20220328' AND Date<='20220411'
) m
Left JOIN table_2 o
ON m.CustomerId = o.CustomerId AND m.OrderSourceId = o.OrderSourceId
ORDER BY Id DESC limit 1,20