您的位置:首页 > 数据库

数据库 执行计划的基本名词解释

2014-12-31 16:14 239 查看
1. 基于成本的优化器(cost-based plan);

它是看语句的代价(cost),这里的代价主要指Cpu和内存;优化器在判断是否使用这种方式的时候,主要参照的是表及索引的统计信息;

统计信息给出表的大小、多少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多的时侯过期统计

信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息。

2. 基于规则的优化器(rule-based plan):

优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。

查考:http://www.poluoluo.com/jzxy/200812/54048.html

3. explain (analyze,verbose,costs,buffers,timing) select * from xxxx;

explain参数解释:

> ANALYZE :执行命令并显示执行事件,默认false

> VERBOSE :对执行计划提供额外的信息,如查询字段信息等,默认false

> COSTS :显示执行计划的,默认true

> BUFFERS :默认false,前置条件是analyze

> FORMAT :默认格式是text

PostgreSQL的cost常量如下 :

> seq_page_cost -- 连续块扫描操作的单个块的cost. 例如全表扫描

> random_page_cost -- 随机块扫描操作的单个块的cost. 例如索引扫描

> cpu_tuple_cost -- 处理每条记录的CPU开销(tuple:关系中的一行记录)

> cpu_index_tuple_cost -- 扫描每个索引条目带来的CPU开销

> cpu_operator_cost -- 操作符或函数带来的CPU开销.(需要注意函数以及操作符对应的函数的三态, 执行计划会根据三态做优化, 关系到多条记录时三态对应的调用次数是需要关心的)

4. 执行计划中的一些术语和关键字。

执行计划运算类型 操作说明 是否有启动时间

-------------------------------------------------------------------

Seq Scan 扫描表 无启动时间

Index Scan 索引扫描 无启动时间

Bitmap Index Scan 索引扫描 有启动时间

Bitmap Heap Scan 索引扫描 有启动时间

Subquery Scan 子查询 无启动时间

Tid Scan ctid = …条件 无启动时间

Function Scan 函数扫描 无启动时间

Nested Loop 循环结合 无启动时间

Merge Join 合并结合 有启动时间

Hash Join 哈希结合 有启动时间

Sort 排序,ORDER BY操作 有启动时间

Hash 哈希运算 有启动时间

Result 函数扫描,和具体的表无关 无启动时间

Unique DISTINCT,UNION操作 有启动时间

Limit LIMIT,OFFSET操作 有启动时间

Aggregate count, sum,avg, stddev聚集函数 有启动时间

Group GROUP BY分组操作 有启动时间

Append UNION操作 无启动时间

Materialize 子查询 有启动时间

SetOp INTERCECT,EXCEPT 有启动时

参考地址:/article/3482114.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: