1、两个查询,相同结果
大多数时候,你可以使用连接或子查询来编写查询。为了说明这一点,以下有一个从 MySQL Sakila 示例数据库中选择地区及其相关城市和地址的查询。第一个 SELECT 语句使用联接,而第二个 SELECT 语句使用子查询获取完全相同的数据:
SELECT co.Country, COUNT(DISTINCT ci.city_id) AS city_cnt, COUNT(a.city_id) AS address_cntFROM country coINNER JOIN city ci ON co.country_id = ci.country_idINNER JOIN address a ON ci.city_id = a.city_idGROUP BY co.country_id;SELECT Co.Country, (Select COUNT(1) FROM City Ci WHERE Ci.country_id=co.country_id) AS city_cnt, (Select COUNT(1) FROM Address A INNER JOIN city c on a.city_id=c.city_id WHERE C.country_id=co.country_id) AS address_cntFrom Country Co;

2、查询执行时间
验证了这两个语句是等效的之后,我们现在可以比较它们的执行时间。

对第二条语句执行相同操作,得出运行时间为 0.021秒 。时间差异很小,但会随着数据量的增加而增长:

3、比较执行计划
一个查询的执行计划可以揭示很多关于它执行速度的信息。在 Navicat 中,我们可以点击“解释”按钮来查看执行计划。 虽然需要一些练习才能熟练地解译解释的结果,但这样做可以在尝试确定查询的效率时带来好处。
解释 1 选项卡显示第一个(联接)查询的执行计划。我们可以一眼看出它涉及 3 个 SIMPLE 选择:

同时,解释 2 选项卡列出了一个 PRIMARY 选择,然后是三个 DEPENDENT SUBQUERY。即使不深入探究,我们也可以看到执行第二个(子查询)语句需要一个额外的步骤:

4、总结
Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL等数据库,让管理不同类型的数据库更加的方便。2022年终狂欢活动火热进行中,全场产品超低价来袭,Navicat系列产品最高直降600元,了解更多活动详情,请咨询在线客服。
数据库管理工具交流群:7645665608 欢迎进群交流讨论
正版数据库管理软件下载、购买、授权咨询,请点这里!
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!