加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

一文搞懂各类数据库SQL执行打算:MySQL、Oracle等

发布时间:2020-01-08 05:57:58 所属栏目:编程 来源:站长网
导读:副问题#e# 执行打算(execution plan,也叫查询打算可能表明打算)是数据库执行 SQL 语句的详细步调,譬喻通过索引照旧全表扫描会见表中的数据,毗连查询的实现方法和毗连的次序等。假如 SQL 语句机能不足抱负,我们起首应该查察它的执行打算。本文首要先容如

对付上面的语句,节点执行的次序为 3 -> 4 -> 2 -> 1。起首执行第 3 行,通过聚积索引(主键)扫描 employees 表加过滤的方法返回了 3 行数据,预计的行数(3.0841121673583984)与此很是靠近;然后执行第 4 行,轮回行使聚积索引的方法查找 departments 表,轮回 3 次每次返回 1 行数据;第 2 行是它们的父节点,暗示行使 Nested Loops 方法实现 Inner Join,Argument 列(OUTER REFERENCES:([e].[department_id]))声名驱动表为 employees ;第 1 行代表了整个查询,不执行现实操纵。

最后,可以行使以下呼吁封锁语句的说明成果:

SET STATISTICS PROFILE OFF 

关于 SQL Server 执行打算和 SQL 调优,可以参考 SQL Server 官方文档执行打算。

PostgreSQL 执行打算

PostgreSQL 中获取执行打算的要领与 MySQL 相同,也就是在 SQL 语句的前面加上EXPLAIN要害字:

一文搞懂各类数据库SQL执行打算:MySQL、Oracle等

PostgreSQL 中的EXPLAIN支持 SELECT、INSERT、UPDATE、DELETE、VALUES、EXECUTE、DECLARE、CREATE TABLE AS 以及 CREATE MATERIALIZED VIEW AS 语句。

PostgreSQL 执行打算的次序凭证缩进来判定,缩进越多的越先执行,同样缩进的从上至下执行。对付以上示例,起首对 employees 表执行全表扫描(Seq Scan),行使 salary > 15000 作为过滤前提;cost 别离表现了预估的返回第一行的本钱(0.00)和返回全部行的本钱(3.34);rows 暗示预估返回的行数;width 暗示预估返回行的巨细(单元 Byte)。然后将扫描功效放入到内存哈希表中,两个 cost 都便是 3.34,由于是在扫描完全部数据后一次性计较并存入哈希表。接下来扫描 departments 而且按照 department_id 计较哈希值,然后和前面的哈希表举办匹配(d.department_id = e.department_id)。最上面的一行表白数据库回收的是 Hash Join 实现毗连操纵。

PostgreSQL 中的EXPLAIN也可以行使 ANALYZE 选项表现语句的现实运行时刻和更多信息:

一文搞懂各类数据库SQL执行打算:MySQL、Oracle等

EXPLAIN ANALYZE通过执行语句得到了更多的信息。个中,actual time 是每次迭代现实耗费的均匀时刻(ms),也分为启动时刻和完成时刻;loops 暗示迭代次数;Hash 操纵还会表现桶数(Buckets)、分批数目(Batches)以及占用的内存(Memory Usage),Batches 大于 1 意味着必要行使到磁盘的姑且存储;Planning Time 是天生执行打算的时刻;Execution Time 是执行语句的现实时刻,不包罗 Planning Time。

关于 PostgreSQL 的执行打算和机能优化,可以参考 PostgreSQL 官方文档机能提醒。

SQLite 执行打算

SQLite 也提供了EXPLAIN QUERY PLAN呼吁,用于获取 SQL 语句的执行打算:

一文搞懂各类数据库SQL执行打算:MySQL、Oracle等

SQLite 中的EXPLAIN QUERY PLAN支持 SELECT、INSERT、UPDATE、DELETE 等语句。

SQLite 执行打算同样凭证缩进来表现,缩进越多的越先执行,同样缩进的从上至下执行。以上示例先扫描 employees 表,然后针对该功效依次通过主键查找 departments 中的数据。SQLite 只支持一种毗连实现,也就是 nested loops join。

其它,SQLite 中的简朴EXPLAIN也可以用于表现执行该语句的假造机指令序列:

一文搞懂各类数据库SQL执行打算:MySQL、Oracle等

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读