前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql Join语句的优化

Mysql Join语句的优化

作者头像
dys
发布2018-04-02 16:35:37
1.9K0
发布2018-04-02 16:35:37
举报
文章被收录于专栏:性能与架构

1. 尽可能减少Join语句中Nested Loop的循环总次数

最有效的办法是让驱动表的结果集尽可能地小,这也正是在本章第二节中所提到的优化基本原则之一——“永远用小结果集驱动大结果集”

比如,当两个表(表A和表B)Join时,如果表A通过WHERE条件过滤后有10条记录,而表B有20条记录。如果选择表A作为驱动表,也就是被驱动表的结果集为20,那么我们通过Join条件对被驱动表(表B)的比较过滤就会进行10次。反之,如果选择表B作为驱动表,则须要进行20次对表A的比较过滤

2. 优先优化Nested Loop的内层循环

不仅在数据库的Join中应该这样做,实际上在优化程序语言时也有类似的优化原则。内层循环是循环中执行次数最多的,每次循环节约很少的资源,就能在整个循环中节约很多的资源

3. 保证Join语句中被驱动表的Join条件字段已经被索引

其目的正是基于上面两点的考虑,只有让被驱动表的Join条件字段被索引了,才能保证循环中每次查询都能够消耗较少的资源,这也正是内层循环的实际优化方法

4. 当无法保证被驱动表的Join条件字段被索引且内存资源充足时,不要太吝惜Join Buffer的设置

在Join是All、Index、range或index_merge类型的特殊情况下,Join Buffer才能派上用场。在这种情况下,Join Buffer的大小将对整个Join语句的消耗起到非常关键的作用

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档