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

mysql优化:
1. left 查询,可以先根据查询条件查询出主表的id等left join 条件数据,缩小数据的范围,在left 查询
2. m.CustomerId=1 AND m.MarketId=1 表里的数据都一样可以去掉,以免影响索引查询;
3. 查询条件单一的,可以强制索引force index(idx_date)

优化后的语句:从10分钟到优化后的12秒
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

依次从最优到最差分别为:
system > const > eq_ref > ref >range > index > all
一般来说,保证查询达到range级别,最好达到ref

system: 只有一条数据匹配时,是const的特列
const:只有一条数据匹配时
eq_ref:主键索引,唯一索引,找到自己返回
ref: 普通索引,把索引数据都排查一遍
range: in,between, < ,>,>=
index:扫描全部索引–内存操作
all:扫描全表–硬盘

Original: https://www.cnblogs.com/csj007523/p/16141339.html
Author: 大树2
Title: mysql left 查询 优化的思考

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8204/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总