【TiDB 使用环境】生产环境 /测试/ Poc
【TiDB 版本】
【操作系统】
【部署方式】云上部署(什么云)/机器部署(什么机器配置、什么硬盘)
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】
下面2条语句内部执行有区别吗?
SELECT id
FROM t1
INNER JOIN t2 ON t1.id = t2.pid AND t1.a = 3305078257
AND t1.b = 2 AND t1.c != -1 AND t1.a = 3305078257 AND t2.a != -1;
vs
SELECT id
FROM t1
INNER JOIN t2 ON t1.id = t2.pid
WHERE t1.a = 3305078257
AND t1.b = 2 AND t1.c != -1 AND t1.a = 3305078257 AND t2.a != -1;
参考这里看看。感觉应该是一样的,常量值条件应该会优化成一样的执行计划。
我感觉是一样的,一个是关联时筛选,一个是先过滤再关联。
具体运行情况可以看执行计划了
怎么写不重要,要看执行计划是不是一样
没区别
结果没区别
如果改成Left join 会如何?
SELECT id
FROM t1
INNER JOIN t2 ON t1.id = t2.pid AND t1.a = 3305078257
AND t1.b = 2 AND t1.c != -1 AND t1.a = 3305078257 AND t2.a != -1;
vs
SELECT id
FROM t1
LEFT JOIN t2 ON t1.id = t2.pid
WHERE t1.a = 3305078257
AND t1.b = 2 AND t1.c != -1 AND t1.a = 3305078257 AND t2.a != -1;
where条件里有left join的表时,left join 就相当于 inner join 了。
写错了2条都改成LEFT JOIN
SELECT id
FROM t1
LEFTJOIN t2 ON t1.id = t2.pid AND t1.a = 3305078257
AND t1.b = 2 AND t1.c != -1 AND t1.a = 3305078257 AND t2.a != -1;
vs
SELECT id
FROM t1
LEFT JOIN t2 ON t1.id = t2.pid
WHERE t1.a = 3305078257
AND t1.b = 2 AND t1.c != -1 AND t1.a = 3305078257 AND t2.a != -1
运行结果没有区别,但是在执行过程中是有区别的。
这样的话应该结果不一样了吧,相当于,第一句是left join,第二句是inner join
left join 应该有区别,包含null值
内连接。这两个SQL语义一样。。可以改成left join试试效果。
链接的先后有区别的,LEFT JOIN会出现null值的行。所以不一样
left join肯定不一样的。
嗯,收到
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。