mysql 排序字段是子查询的结果如何避免临时表 50
SELECT(selectcount(1)FROMordersoWHEREo.worker_id=w.id)couFROMworkerwORDERBYcouDESC排序的...
SELECT (select count(1) FROM orders o WHERE o.worker_id = w.id) cou FROM worker w ORDER BY cou DESC排序的字段是 cou 是子查询的结果,导致无法加入索引产生临时表,请问如何优化,这点分都给了
展开
2个回答
2020-11-13 · MySQL开源数据库领先者
关注
展开全部
子查询优化策略
对于不同类型的子查询,优化器会选择不同的策略。
1. 对于 IN、=ANY 子查询,优化器有如下策略选择:
semijoin
Materialization
exists
Materialization
exists
derived_merge,将派生表合并到外部查询中(5.7 引入 );
将派生表物化为内部临时表,再用于外部查询。
2. 对于 NOT IN、<>ALL 子查询,优化器有如下策略选择:
3. 对于 derived 派生表,优化器有如下策略选择:
注意:update 和 delete 语句中子查询不能使用 semijoin、materialization 优化策略
2017-09-29
展开全部
mysql 排序字段是子查询的结果如何避免临时表
额 联合查询 + 临时表 也可以 效率貌似更低
select T1.* from T1
left outer join (select * from T1 order by `key` desc limit 0,100) as tempTable
on T1.id = tempTable.id
group by `key`
直接用临时表 也可以
select * from (select * T1 order by `key` limit 0,1000) as tempTable group by `key`
额 联合查询 + 临时表 也可以 效率貌似更低
select T1.* from T1
left outer join (select * from T1 order by `key` desc limit 0,100) as tempTable
on T1.id = tempTable.id
group by `key`
直接用临时表 也可以
select * from (select * T1 order by `key` limit 0,1000) as tempTable group by `key`
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询