数据库必知词汇:查询优化器

简介: 查询优化器是数据库中负责生成 SQL 语句的有效执行计划的数据库引擎组件,具体地说,查询优化器是针对用户的请求进行内部优化,生成(或重用)执行计划并传输给存储引擎来操作数据,最终返回结果给用户的组件。它是关系型数据库管理系统的核心之一,决定对特定的查询使用哪些索引、哪些关联算法、从而使其高效运行,它是优化器中最重要的组件之一。

查询优化器是数据库中负责生成 SQL 语句的有效执行计划的数据库引擎组件,具体地说,查询优化器是针对用户的请求进行内部优化,生成(或重用)执行计划并传输给存储引擎来操作数据,最终返回结果给用户的组件。它是关系型数据库管理系统的核心之一,决定对特定的查询使用哪些索引、哪些关联算法、从而使其高效运行,它是优化器中最重要的组件之一。

主流的查询优化器主要包括两种,即基于语法的和基于成本的。

基于语法的查询优化器完全根据查询的准确语法来选择规划,这是建立在查询中子句的顺序的基础上的。一旦选定了一个规划,该查询就将完全按照该计划执行,并且执行的顺序就是子句的顺序。基于语法的查询不需要保存分布统计。随着表的分布的改变,一段时间后,所选定的查询规划就可能不再有那么好的性能。

基于成本的查询优化器分析数据和索引列的分布统计,从而根据完成查询的成本决定效率最高的执行规定。成本是根据资源利用率来测量的。响应时间也是影响成本的一个因素。数据库寻求能够以最快的速度把结果返回给用户并且不会导致其他方面性能下降的途径。因此,在具有多个处理器的系统中,查询处理器可能选择这样的执行规划,虽然它的总体成本比其他的执行规划要大一些,但是它可以更快地把结果返回给用户,并且不会降低其他方面的性能。

分布统计是从索引和表中的数据列的分布信息汇总出来的,并且由数据库自动在建立了索引的列上创建和维护。也可以选择把统计建立在没有索引的列上。基于成本的优化器将分析各种查询规划,并且作为其评价标准的信息,包括被请求的数据量以及处理过程花费的时间,具体表现在对CPU和内存的影响以及I/O操作的次数。

资料来源:
黄钊吉著 .SQL Server性能优化与管理的艺术.北京:机械工业出版社,2014
[美]Jenney Lynne Fields著 袁勤勇 何欣等译.Microsoft SQL Server 2000优化指南.北京:清华大学出版社,2001
微软公司著.数据库程序设计:SQL Server2000数据库程序设计 .北京:高等教育出版社,2007

相关文章
|
关系型数据库 MySQL 分布式数据库
|
17天前
|
存储 缓存 关系型数据库
数据库查询优化的注意事项
【10月更文挑战第28天】
26 2
|
3月前
|
Java UED 开发者
当错误遇上Struts 2:一场优雅的异常处理盛宴,如何让错误信息成为用户体验的救星?
【8月更文挑战第31天】在Web应用开发中,异常处理对确保用户体验和系统稳定性至关重要。Struts 2 提供了完善的异常处理机制,包括 `exception` 拦截器、`ActionSupport` 类以及 OGNL 表达式,帮助开发者优雅地捕获和展示错误信息。本文详细介绍了 Struts 2 的异常处理策略,涵盖拦截器配置、错误信息展示及自定义全局异常处理器的实现方法,使应用程序更加健壮和用户友好。
53 0
|
3月前
|
SQL 关系型数据库 MySQL
SQL查询优化的神奇之处:如何用高效查询让你的数据库飞起来?
【8月更文挑战第31天】在现代软件开发中,SQL查询优化对于提升应用性能至关重要。本文详细探讨了四大优化策略:索引、查询语句、数据类型及分区优化,并通过示例代码展示了具体操作方法。从创建索引到选择合适的数据类型,再到对大数据表进行分区,每一步都能显著提升查询效率。此外,文章还分享了最佳实践,包括使用数据库性能工具和避免全表扫描等技巧,帮助开发者更好地理解和应用SQL查询优化技术,让数据库运行更加高效。
160 0
|
4月前
|
SQL 缓存 Java
使用Hibernate实现复杂数据库查询优化策略
使用Hibernate实现复杂数据库查询优化策略
|
4月前
|
SQL 缓存 Java
使用Hibernate实现复杂数据库查询优化策略
使用Hibernate实现复杂数据库查询优化策略
|
6月前
|
SQL 关系型数据库 MySQL
MYSQL数据库查询优化
MySQL 中的 `EXPLAIN` 语句用于查看 SQL 查询的执行计划,帮助分析查询如何使用索引以及优化查询性能。`EXPLAIN` 输出包括多个列,例如 `id`、`select_type`、`table`、`type`、`possible_keys`、`key`、`key_len`、`ref`、`rows` 和 `Extra`,这些列提供了关于如何处理查询的详细信息。
386 1
|
6月前
|
SQL 存储 数据库
SQL数据库查询优化技巧
【5月更文挑战第6天】本文介绍了7个SQL数据库查询优化技巧,包括选择合适索引、避免`SELECT *`、使用JOIN代替子查询、优化WHERE子句、使用LIMIT、分析查询计划和定期维护数据库。通过这些方法,开发者可以提升查询效率,改善系统性能。
|
6月前
|
SQL 缓存 PHP
【PHP开发专栏】PHP数据库查询优化技巧
【4月更文挑战第29天】本文探讨了PHP数据库查询优化技巧,包括数据库设计的规范化与反规范化,合理使用索引,优化查询逻辑,以及避免SELECT *。在SQL查询优化中,利用EXPLAIN分析查询、优化JOIN操作和子查询,以及改进WHERE条件。PHP层面的优化涉及预处理语句、缓存查询结果、分页查询优化和异步处理。此外,还提到了高级技术如数据库分区、读写分离和分布式数据库。通过这些方法,开发者能提升查询效率,优化应用性能和用户体验。
59 1
|
6月前
|
存储 缓存 关系型数据库
关系型数据库查询优化
关系型数据库查询优化
67 3