彩票走势图

数据库管理工具Navicat Premium使用教程:在子查询和联接之间选择

翻译|使用教程|编辑:秦林|2022-11-24 09:38:33.063|阅读 211 次

概述:如何在Navicat 16版本实现子查询和联接的选择,小编通过本文给大家具体介绍,欢迎下载最新版试用体验。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>


Navicat Premium正版试用下载

如果你需要在查询添加许多联接,数据库服务器就必须做更多的工作,这可能会导致数据检索时间变慢。本文将介绍几个你可以执行的快速测试,比较使用联接的查询和包含子查询的查询,让你可以选择最佳性能的查询。

1、两个查询,相同结果

大多数时候,你可以使用连接或子查询来编写查询。为了说明这一点,以下有一个从 MySQL Sakila 示例数据库中选择地区及其相关城市和地址的查询。第一个 SELECT 语句使用联接,而第二个 SELECT 语句使用子查询获取完全相同的数据:

SELECT
    co.Country,
    COUNT(DISTINCT ci.city_id) AS city_cnt,
    COUNT(a.city_id)           AS address_cnt
FROM country co
INNER JOIN city ci
    ON co.country_id = ci.country_id
INNER JOIN address a
    ON ci.city_id = a.city_id
GROUP 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_cnt
From Country Co;

在 Navicat中,我们可以很容易地比较查询结果,因为它可以同时运行多个查询。每个结果集都显示在 SQL 编辑器下的一个选项卡中。在下图中,结果 2 选项卡的内容显示在结果 1 旁边以便快速比较:

2、查询执行时间

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

为此,我们可以选择其中一个语句,然后点击“运行”按钮。只要在编辑器中选择了文本,该按钮的标签就会変为“运行已选择的”。在画面底部可以看到运行时间是 0.020秒:

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

3、比较执行计划

一个查询的执行计划可以揭示很多关于它执行速度的信息。在 Navicat 中,我们可以点击“解释”按钮来查看执行计划。 虽然需要一些练习才能熟练地解译解释的结果,但这样做可以在尝试确定查询的效率时带来好处。

解释 1 选项卡显示第一个(联接)查询的执行计划。我们可以一眼看出它涉及 3 个 SIMPLE 选择:

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

4、总结

虽然本文似乎证实了联接与子查询:哪个更快?文章得出的结论,但比较连接和子查询方法颇有价值的。在任何情况下,子查询仍然有优于连接的时候,例如当你必须即时计算聚合值并在外部查询中使用它进行比较时。

Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL等数据库,让管理不同类型的数据库更加的方便。慧都2022年终狂欢活动火热进行中,全场产品超低价来袭,Navicat系列产品最高直降600元,了解更多活动详情,请咨询。


数据库管理工具交流群:7645665608  欢迎进群交流讨论

正版数据库管理软件下载、购买、授权咨询,请点这里!


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP