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)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部