一文搞懂各类数据库SQL执行打算:MySQL、Oracle等
对付上面的语句,节点执行的次序为 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要害字: 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 选项表现语句的现实运行时刻和更多信息: 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 语句的执行打算: SQLite 中的EXPLAIN QUERY PLAN支持 SELECT、INSERT、UPDATE、DELETE 等语句。 SQLite 执行打算同样凭证缩进来表现,缩进越多的越先执行,同样缩进的从上至下执行。以上示例先扫描 employees 表,然后针对该功效依次通过主键查找 departments 中的数据。SQLite 只支持一种毗连实现,也就是 nested loops join。 其它,SQLite 中的简朴EXPLAIN也可以用于表现执行该语句的假造机指令序列: (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |