数据库的简单查询和连接查询

数据库的简单查询和连接查询,第1张

简单查询步骤如下:

1、查询计算机系学生的学号和姓名;

2、查询选修了课程的学生学号;

3、查询选修101课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列。

连接查询步骤如下:

1、查询每个学生的情况以及他所选修的课程;

2、查询学生的学号、姓名、选修的课程名及成绩;

3、查询选修101课程且成绩为90分以上的学生学号、姓名及成绩;

4、查询计算机系的所有同学的所有课程的成绩。

九道门丨关于SQL查询优化的详细指南,赶紧收藏

九道门聊数据

九道门聊数据

10个月前

SQL(结构化查询语言)是一种用于访问、存储、创建、删除数据库以及执行所有其他与数据相关 *** 作的标准语言。SQL 中有四种类型的语言:

1. DDL(数据定义语言)

这包括用于创建和更改数据库架构的命令。例如,创建、删除、更改、删节。

2. DML(数据 *** 作语言)

这包括用于更新数据库中数据的命令。例如,选择、更新、插入、删除。

3. DCL(数据控制语言)

这包括用于访问数据库的命令。例如,授予、撤销。

4. TCL(交易控制语言)

这包括用于管理数据库中事务的命令。例如,提交、恢复。

文章图片1

图片来源:谷歌图片

在进入 SQL 查询优化的主题之前,我们先来了解一下查询的实际处理过程:

一、查询处理

查询处理被定义为与从数据库中提取数据相关联的一组阶段。它包括将用高级语言(如 SQL)编写的查询转换为可通过数据库的物理级别实现、SQL 查询优化技术和查询的原始评估来理解的形式。

查询处理涉及三个主要步骤:

文章图片2

1. 解析器和转换器:查询处理的第一步是解析和翻译。解析器就像编译器中的解析器一样,会检查查询的语法,无论数据库中是否存在上述关系。高级查询语言(如 SQL)适合人们使用,但是,它完全不适合系统内部表示,因此需要翻译。内部表示可以是关系代数的扩展形式。

2.优化:SQL 查询可以用许多不同的方式编写。优化后的查询还取决于数据在文件组织中的存储方式。查询还可以具有不同的对应关系代数表达式。

文章图片3

3. 执行计划:从数据库获取数据的基本 *** 作的系统分步执行称为查询评估计划。针对特定查询的不同评估计划具有不同的查询成本。成本可能包括磁盘访问次数、执行查询的 CPU 时间、分布式数据库的通信时间。

二、SQL 查询优化的目的

SQL 查询优化的主要目的是:

1.减少响应时间:主要目标是通过减少响应时间来提高性能。为了更好的用户体验,用户请求数据和获取响应之间的时间差应该最小化。

2. 减少 CPU 执行时间:为了获得更快的结果,必须减少查询的CPU执行时间。

3. 提高吞吐量:在特定查询中要获取的行数应该以最有效的方式进行,以便使用最少的资源。

注:

在本教程中,我们将使用 AdventureWorks 数据库来显示各种命令及其优化的解决方案。你可以从 此处 下载数据库。

AdventureWorks 数据库是由 Microsoft SQL Server 提供的示例数据库。这是一个标准数据库,用于显示企业的日常事务处理。场景包括销售、客户管理、产品管理和人力资源。

三、用于分析SQL查询性能的指标

在空间、时间、CPU利用率和其他资源方面,有几种计算查询成本的指标:

1. 执行时间:分析查询性能最重要的指标是查询的执行时间。执行时间/查询持续时间是指查询从数据库返回行所花费的时间。我们可以使用以下命令查找查询持续时间:

SET STATISTICS TIME ONSELECT * FROM SalesLT.Customer

文章图片4

通过使用 STATISTICS TIME ON,我们可以看到查询的解析时间、编译时间、执行时间和完成时间。

解析和编译时间: 解析和编译查询以检查查询语法所需的时间称为"解析"和"编译时间"。

执行时间:查询获取数据所用的 CPU 时间称为"执行时间"。

完成时间:查询返回结果的确切时间称为"完成时间"。

通过分析这些时间,我们可以清楚地了解查询的执行是否符合要求。

2. 统计 IO:

IO 是在查询时访问内存缓冲区以进行读取 *** 作所花费的主要时间。它提供了对执行查询的延迟和其他瓶颈的深入了解。通过设置 STATISTICS IO ON,我们可以获得执行查询而执行的物理和逻辑读取次数。

从 SalesLT.Customer 中选择 *

文章图片5

逻辑读取:从缓冲区缓存执行的读取次数。

物理读取:当在缓存中不可用时,从存储设备执行的读取次数。

3. 执行计划:

执行计划是优化程序用于读取行的详细分步处理计划。可以使用以下过程在数据库中启用它。它能帮助我们分析查询执行的主要阶段。我们还可以找出执行的哪个部分需要更多时间,并优化该子部分。

SELECT p.Name, Color, ListPrice FROM SalesLT.Product pINNER JOIN SalesLT.ProductCategory pcON P.ProductCategoryID = pc.ProductCategoryID

方法和详细的 *** 作步骤如下:

1、第一步,查询该库中的所有表,测试sql,代码见下图,转到下面的步骤。

2、第二步,执行完上面的 *** 作之后,查询有多少个数据表,见下图,转到下面的步骤。

3、第三步,执行完上面的 *** 作之后,在TEST的开头编写一个查询表的脚本,每个表中的记录数,代码见下图,转到下面的步骤。

4、第四步,执行完上面的 *** 作之后,执行sql,在输出窗口中,可以看到每个表的输出,见下图。这样,就解决了这个问题了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9397380.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存