mysql-explain之Using temporary

编程入门 行业动态 更新时间:2024-10-18 14:23:22

今天同事问到我一个问题,说某个带有join的查询语句创建视图后,查询视图时带有order by字段时,某些字段会很快,某些会稍微慢一些。

drop view if exists test1;
create view test1 as
select a.*,b.b_info_outstandingbalance,ifnull(b.new_count,0) new_count,ifnull(b.new_amount,0) new_amount,b.adj_term_year,b.private_percent from 
blr_company_info a
inner join 
(select company_id,b_info_outstandingbalance,new_count,new_amount,adj_term_year,private_percent from blr_company_bond_info  where c_date = (select max(c_date) from blr_company_bond_info)) b
on a.company_id = b.company_id

具体创建视图sql如上面所示,其中a表大概是五千条数据,而b表大概是四千条数据,当使用原在b表中的字段做order by的时候就稍微快一些,a表中的字段做order by就稍微慢一些。
然后我就做了个测试:

a表的company_id

explain
select * from test1 order by company_id desc 

b表的b_info_outstandingbalance

explain
select * from test1 order by b_info_outstandingbalance desc 

两个explain的区别就是上面的那个用到了临时表,为什么会用到临时表,为什么只有他用到了临时表,之后又做了几个实验,发现只有join的主表中的字段进行order by的时候才不会用到临时表,而inner join的时候主表的选择方式为数据量最少的表为主表,所以b表为主表,当b表中的字段做order by的时候才不会用到临时表。
另外多说一句:left join的主表选择方式为左侧表为主表,inner join主表选择方式为数据量少的为主表,所以 left join的时候最好将数据量少的表放在左侧,这样的查询速度会更快些。

具体关于explain的解释可以移步到此处

更多推荐

mysql-explain之Using temporary

本文发布于:2023-06-14 07:45:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1452807.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:mysql   explain   temporary

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!