sql中leftjoinon条件的效率高低比较?

说实话,前段时间在论坛上看到这个话题的时候,我感到很困惑。
MySQL处理子查询的两种方式(创建临时表或直接将它们与外部查询合并)实际上非常有趣。

记得有一次,在调试一个查询时,表t_a中有超过5 00万条数据,而表t_b只有几十万条数据。
当时使用左连接后,我创建了子查询的左连接。
老实说,执行计划一开始有点混乱,因为运行两种创作方法时的资源消耗曲线非常相似。
后来我想知道MySQL是否自动优化子查询。
后来查了官方文档,发现这种可能性确实有可能。
这意味着 MySQL 自动重写子查询,以与直接左连接相同的方式执行。

但是!这个问题不能一概而论。
后来我在另一个项目上尝试了一下,这次数据量很大。
t_a 表有近 1 000 万个条目,t_b 表有数百万个条目。
这一次,行动计划一目了然。
子查询中显然存在大量的“创建临时表”和“访问临时表”操作。
那时,我的心扑通扑通地跳。
当数据量较小时,这一点可能并不明显,但随着数据量的增加,其真实本质就会变得明显。

说白了,就像开车一样。
当数据量较小时,驾驶电瓶车短距离感觉与驾驶汽车没有什么区别。
然而,在实际长途行驶时,就会出现电瓶车没电的困境。
MySQL 中的临时表就是电池。
这对于小型查询来说很好,但会减慢大型查询的速度。

所以现在,当我写SQL时,尤其是处理大量数据时,当我看到子查询中包含的数据量异常大时,我总是会重新审视执行计划。
创建临时表后,您可能需要考虑更改其创建方式。
当然,这并不是硬性规定,要根据具体情况而定。
例如,子查询可能返回很少的行并且不会产生太大影响。
细节可能有点极端,因为我没有亲自测试过该领域的每种数据类型组合,但总体方向是正确的。
如果使用过多,临时表可能会成为真正的负担。

如何在MySQL数据库进行子查询

嘿嘿,SQL查询技巧就这么多了。
我们先来谈谈 IN 关键字。
这就像在超市买东西一样。
你想要的东西都在架子上,所以用 IN 来表示。
例如,如果你想查找某个国家的所有城市,你可以这样写:
SELECT FROM city WHERE CountryCode IN(从国家/地区选择代码);
就像超市说“这些城市在这个国家”。

那么,如果你不想查找某个国家的城市,那就用NOT IN,相当于说“我对这个国家不感兴趣”。
例如:
SELECT FROM city WHERE CountryCode NOT IN(从国家/地区选择代码);
这相当于在超市里说“我不买这个国家的产品”。

我们来谈谈 EXISTS 关键字。
就像去超市看看有没有你想要的东西一样。
如果是,你就买; 如果没有,你就不会购买。
编写代码为:
从存在的城市中选择(从国家/地区中选择名称);
NOT EXISTS 则相反。
如果你没有你想要的东西,你就不会买。
代码是这样的:
从不存在的城市中选择(从国家/地区中选择名称);
然后是ANY关键字,就像在超市里,你想要很多东西,但你只想知道哪一个是最便宜的。
编写代码为:
从城市中选择人口 >= 任意(从国家/地区中选择人口);
还有比较运算符,就像您在超市比较价格一样。
例如:
SELECT FROM city WHERE Population >= (SELECT Population FROM Country WHERE Name = 'Afghanistan');
该查询是查找人口大于或等于阿富汗的所有城市。

最后是ALL关键字,就像你在超市,只有看到所有产品都比某个价格便宜时你才会购买。
编写代码为:
从城市中选择人口 >= ALL(从国家/地区中选择人口,其中名称 = '阿富汗');
以上是SQL查询中的一些技巧,希望对你有帮助。
说实话,当时我并没有想到这一点,但是随着代码写的多了,我也逐渐明白了。

MySQL子查询返回多行怎么办

这是错误的...“子查询返回超过 1 行”...
这意味着子查询的结果...超过 1 行。
MySQL 不明白你想要哪一个。

解决方案...只需在子查询条件后添加“Limit 1 ”即可。

例如:
sql 哪里( 选择 cc.ip 来自crawl_site抄送 WHERE cc.id = this_.site_id ) > _ip.start_ip
这个子查询...只能返回一个结果。
如果返回两个...MySQL会感到困惑并直接报告此错误。

---
扩展信息...管理MySQL...有很多工具。

命令行... 有一个命令叫做 mysql... 和 mysqladmin。

图形界面...MySQL官方站点有...MySQLAdministrator、MySQLQueryBrowser、MySQLWorkbench。

phpMyAdmin...它是用PHP编写的...您可以在网络上管理您的数据库...非常方便。

phpMyBackupPro...它也是用PHP编写的...Web界面...您可以安排备份...您可以设置自己的时间...它非常易于使用。

还有其他工具...比如 mysql-front、emsmysqlmanager、navicat...
就是这个...