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

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

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

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

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

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

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

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

相关文章
|
关系型数据库 MySQL 分布式数据库
|
2月前
|
SQL 缓存 Java
使用Hibernate实现复杂数据库查询优化策略
使用Hibernate实现复杂数据库查询优化策略
|
2月前
|
SQL 缓存 Java
使用Hibernate实现复杂数据库查询优化策略
使用Hibernate实现复杂数据库查询优化策略
|
4月前
|
SQL 关系型数据库 MySQL
MYSQL数据库查询优化
MySQL 中的 `EXPLAIN` 语句用于查看 SQL 查询的执行计划,帮助分析查询如何使用索引以及优化查询性能。`EXPLAIN` 输出包括多个列,例如 `id`、`select_type`、`table`、`type`、`possible_keys`、`key`、`key_len`、`ref`、`rows` 和 `Extra`,这些列提供了关于如何处理查询的详细信息。
365 1
|
4月前
|
SQL 存储 数据库
SQL数据库查询优化技巧
【5月更文挑战第6天】本文介绍了7个SQL数据库查询优化技巧,包括选择合适索引、避免`SELECT *`、使用JOIN代替子查询、优化WHERE子句、使用LIMIT、分析查询计划和定期维护数据库。通过这些方法,开发者可以提升查询效率,改善系统性能。
|
4月前
|
SQL 缓存 PHP
【PHP开发专栏】PHP数据库查询优化技巧
【4月更文挑战第29天】本文探讨了PHP数据库查询优化技巧,包括数据库设计的规范化与反规范化,合理使用索引,优化查询逻辑,以及避免SELECT *。在SQL查询优化中,利用EXPLAIN分析查询、优化JOIN操作和子查询,以及改进WHERE条件。PHP层面的优化涉及预处理语句、缓存查询结果、分页查询优化和异步处理。此外,还提到了高级技术如数据库分区、读写分离和分布式数据库。通过这些方法,开发者能提升查询效率,优化应用性能和用户体验。
47 1
|
4月前
|
存储 缓存 关系型数据库
关系型数据库查询优化
关系型数据库查询优化
49 3
|
4月前
|
存储 缓存 负载均衡
数据库性能优化(查询优化、索引优化、负载均衡、硬件升级等方面)
数据库性能优化(查询优化、索引优化、负载均衡、硬件升级等方面)
|
4月前
|
缓存 NoSQL 数据库
用 Python 进行数据库查询优化
在数据量较大的情况下,数据库查询的性能可能会成为系统性能的瓶颈。为了提高查询速度和效率,需要对查询进行优化。在 Python 中,我们可以采取一些策略来优化数据库查询。