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,在输出窗口中,可以看到每个表的输出,见下图。这样,就解决了这个问题了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)