暂无图片
mysql关于多表join关联的执行流程
我来答
分享
佳佳
2021-08-23
mysql关于多表join关联的执行流程

mysql关于join关联的执行流程:

举个例子:
select * from table1 a join table2 b on a.id=b.id where a.name=xxx and b.sex=xxx;

问题:
1.像这样的SQL,首先会去把a.name=xxx and b.sex=xxx;过滤出来,然后再进行join吗?
还是先进行join,后过滤?

2.假如a表是驱动表,是不是需要在a.name 、b.sex、b.id上需要有索引,这样子优化最好。
(就是说要在过滤条件上加索引,还要在被驱动表的join列上加索引)

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
执剑者

1、如果on里面没有其他过滤条件,那么就先关联,然后对关联后的结果使用where条件进行过滤。

2、关联列上最好有索引。

暂无图片 评论
暂无图片 有用 0
打赏 0
佳佳
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 0
打赏 0
obpilot
explain select * from table1 a join table2 b on a.id=b.id where a.name=xxx and b.sex=xxx;
复制

结果输出来就知道了。

暂无图片 评论
暂无图片 有用 0
打赏 0

把执行计划贴出来就知道了.

暂无图片 评论
暂无图片 有用 0
打赏 0
chengang

在驱动表上建立条件过滤索引。在被驱动表上建立 关联字段索引

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
sql数据库查询数据量太大查不出来
回答 3
已采纳
使用explian查看下执行计划,根据extra列进行优化可以看看之前墨天轮大神留的文档:https://www.modb.pro/db/47381
mysql8.0 ,创建通用表空间报错
回答 2
你可以到官方文档里面搜索,mysql8里面肯定有
mysql为什么默认auto commit?
回答 1
MySQL默认采用自动提交的原因是为了保证数据的一致性和可靠性。在多用户环境下,如果不采用自动提交,就会出现多个用户同时修改同一条记录的情况,从而导致数据的不一致性。而自动提交可以避免这种情况的发生,
oracle数据库怎么导入mysql里?2个库网络环境不通
回答 1
已采纳
方法一:使用阿里巴巴开源的datax产品https://github.com/alibaba/datax下载编译用datax将oracle数据导出为文本文件(csv格式)。将文本文件复制到目标库。用d
NDB集群配2个SQL NODE,这2个SQL NODE的前面除了用haproxy,是否有其他解决方案,让2个SQL NODE都用起来?
回答 2
已采纳
proxysql了解一下。
请教下两条 SQL语句分别在 Mysql(MyIsam , InnoDB) ,Sql Server , Oracle , PGsql 中的效率对比 ?
回答 1
oracle一般会自动选择方案二
MySQL如何查看和修改系统参数?
回答 1
已采纳
在MySQL里,参数也可以叫变量,一般配置文件为:/etc/my.cnf。当MySQL实例启动时,MySQL会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通
MySQL 8.0.21 漏洞如何修复
回答 4
谢谢各位指导。
mysql的分支有哪些主要的?
回答 1
已采纳
percona/mariadb
MySQL分组排序后取每组的第一条记录,除了用row number还有其他办法吗?
回答 1
已采纳
窗口函数是最好理解,最佳的。可以用伪列来实现。