先写结论:
1, Inner Join 的On 与 Where (按方便阅读来书写,查询分析器会自动优化)
2, 先写Inner Join 再写Left Join
3, 先连接数据量小的表 再连接数据量大的表
4, 如果同时有Left Join和Group By, 先Group By到临时表, 再用临时表Left Join其他数据
4, 优化时,如果同时有Left Join和Inner Join, 先Inner Join到临时表 再用临时表Left Join 其他数据
5, 无非必要不要排序
SQL 查询处理步骤[转载]
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。
每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中指定某一子句,将跳过相应的步骤。下面是对应用于SQL server 2000和SQL Server 2005的各个逻辑步骤的简单描述。
逻辑查询处理阶段简介
FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
WHERE:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
HAVING:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
SELECT:处理SELECT列表,产生VT8.
DISTINCT:将重复的行从VT8中移除,产生VT9.
ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。
注:步骤10,按ORDER BY子句中的列列表排序上步返回的行,返回游标VC10.这一步是第一步也是唯一一步可以使用SELECT列表中的列别名的步骤。这一步不同于其它步骤的 是,它不返回有效的表,而是返回一个游标。SQL是基于集合理论的。集合不会预先对它的行排序,它只是成员的逻辑集合,成员的顺序无关紧要。对表进行排序 的查询可以返回一个对象,包含按特定物理顺序组织的行。ANSI把这种对象称为游标。理解这一步是正确理解SQL的基础。
因为这一步不返回表(而是返回游标),使用了ORDER BY子句的查询不能用作表表达式。表表达式包括:视图、内联表值函数、子查询、派生表和共用表达式。它的结果必须返回给期望得到物理记录的客户端应用程序。
分享到:
相关推荐
综上所述,SQL Server 7的性能优化涉及到多个层面,包括查询优化、索引策略、存储配置、事务处理、高级特性的使用、性能监控以及硬件配置。通过对这些方面的深入理解和实践,可以有效提升SQL Server 7的运行效率,为...
【Oracle SQL性能优化】 Oracle SQL性能优化是数据库开发人员必须掌握的关键技能,它涉及到SQL语句的编写、执行过程、优化器的选择以及执行计划的分析等多个方面。在Oracle数据库环境中,优化SQL性能对于提升系统...
在"关系查询处理及优化.pptx"这个课件中,你将能够找到更详细的信息,包括具体的SQL查询优化技巧、查询优化器的工作原理、索引的创建与管理等内容,这对于提升你在数据库管理领域的专业能力非常有帮助。
在实际项目中,还需要考虑性能优化、安全性和事务处理等方面。例如,使用PreparedStatement防止SQL注入,通过批处理减少网络通信,合理设计数据库架构以优化查询效率,以及正确设置连接池来管理数据库连接。 在...
在SQL Server 2008中,查询性能优化是一项至关重要的任务,因为它直接影响到数据库系统的响应时间和整体效率。本文将探讨几个关键的优化策略,尤其是关于索引的创建和管理。 首先,创建有用的索引是提升查询性能的...
2. SQL Server详解:"sql_server_p"可能表示PPT会深入讨论SQL Server的特性,如事务处理、备份恢复、安全性、性能优化等。 3. SQL Server实践:"sql_server_ppt"可能意味着PPT包含了大量的实例,通过实际操作来教授...
【ORACLE SQL性能优化】是关于提升ORACLE数据库中SQL语句执行效率的专题,旨在帮助开发者理解SQL执行过程,掌握ORACLE优化器的工作原理,以及如何分析和优化SQL执行计划。以下是该主题涵盖的关键知识点: 1. **优化...
书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...
总结,Oracle SQL性能优化是一个涉及多方面因素的过程,需要结合索引策略、SQL改写、数据库配置、并行处理等多个层面进行综合考虑。通过学习和实践,我们可以有效地提升Oracle数据库系统的运行效率。
Oracle SQL性能优化是一个复杂而重要的主题,涉及到多个层面的知识。首先,我们要理解SQL语句的执行过程,这是优化的基础。SQL语句从被提交到执行,会经历解析、优化、执行等多个步骤。在解析阶段,Oracle会检查语法...
此外,安全性、备份恢复和性能优化也是SQL Server 2000管理的重要组成部分。 在SQL Server 2000的学习过程中,理解其架构、熟悉T-SQL语法、掌握企业管理器和查询分析器的使用、了解数据库设计原则,以及学习如何与...
对于准备面试的人员,除了掌握SQL语法外,还需要理解大数据系统的工作原理,例如HDFS的存储模型、MapReduce或Spark的计算模型,以及如何设计高效的SQL查询以适应大数据的规模和性能需求。同时,熟悉数据库设计原则,...
版本42可能对应的是某个特定的发布,它可能包含了对新特性的支持、性能优化或者错误修复。这个驱动程序通常以JAR(Java Archive)文件的形式分发,例如压缩包内的"sqljdbc42.jar",这个文件包含了所有必要的类和资源...
SQL语句的处理过程包括解析、安全性和语法检验、查询重写等步骤。减少解析的技术,如使用存储过程和避免直接量,可以提高效率。Oracle的执行计划有两种目标:最大速度(first_rows模式)和最小资源占用(all_rows...