{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

MySQL系统查询条件的子查询条件中包含了主表字段,应该如何优化?

ISherryISherry 回答0 收藏1
收藏问题

2条回答

zhongmeizhi

zhongmeizhi

回答于2022-06-28 14:47

楼主的这个问题并不是非常清晰,但大体意思是说Mysql优化,实际上不同的业务场景可能会有不同的优化方案,比如有些场景可以配置查询缓存,有些则不可以。

1、对于查询SQL语句的优化,一般来说先想到是加索引

2、使用explain查看SQL语句的执行计划,看看时间主要花费在什么地方

3、根据业务场景,调整表结构,优化子查询的效率

4、根据业务场景,对表进行适当的拆分,将这个查询需要的字段多带带拆分到一个表中。

更多的优化方案可以关注我回答的“如何使用phpMyadmin优化MySQL数据库?”这个问题。感谢

评论0 赞同0
  •  加载中...
icattlecoder

icattlecoder

回答于2022-06-28 14:47

子查询优化策略

对于不同类型的子查询,优化器会选择不同的策略。

1. 对于 IN、=ANY 子查询,优化器有如下策略选择:

  • semijoin
  • Materialization
  • exists
  • 2. 对于 NOT IN、<>ALL 子查询,优化器有如下策略选择:
  • Materialization
  • exists
  • 3. 对于 derived 派生表,优化器有如下策略选择:
  • derived_merge,将派生表合并到外部查询中(5.7 引入 );
  • 将派生表物化为内部临时表,再用于外部查询。
  • 注意:update 和 delete 语句中子查询不能使用 semijoin、materialization 优化策略

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<