PostgreSQL笔记36:执行计划基础解读与优化器成本模型

7 款常用的 PostgreSQL GUI 工具测评 目录PgAdminNavicatDBeaverDatagripBeekeeper StudioQueryPie码匠如何在上述 PostgreSQL GUI 中进行选择?作为一名应用开发者,您对 PostgreSQL(简称 Postgres)一定不陌生,在 StackOverflow 2021 年度开发者调查中,PostgreSQL 是开发人员第二常用的数据库,并且在使用过的用户中,使用满意度高达 70%(仅次于 Redis)。PostgreSQL 本身附带一个名为 psql 的内置 CLI,但有些人不喜欢通 阅读详情

纲要

  • EXPLAIN 与 EXPLAIN ANALYZE —— 执行计划的生成与解读
  • 执行计划的树形结构 —— 自底向上、从左往右的阅读原则
  • 成本模型(Cost Model) —— cost、rows、width 的含义
  • 成本参数 —— seq_page_cost、random_page_cost、cpu_tuple_cost、cpu_index_tuple_cost、cpu_operator_cost
  • 统计信息(Statistics) —— pg_stats 视图、histogram_bounds、most_common_vals、most_common_freqs
  • 行数估算(Row Estimation) —— 选择率(Selectivity)的计算原理
  • 多元统计信息(Extended Statistics) —— CREATE STATISTICS 解决关联列估算失真
  • 执行计划可视化工具 —— PEV2、Depesz、PGBadger

执行计划:理解 PostgreSQL 如何执行查询

在关系型数据库中,理解执行计划是 SQL 性能优化的基础。PostgreSQL 的查询优化器(Planner)为每一个查询生成一个执行计划(Execution Plan),该计划定义了数据库访问数据的具体方式[reference:0][reference:1]。掌握执行计划的阅读方法,是排查慢查询、进行 SQL 调优的必备技能。

执行计划的结构与阅读规则

PostgreSQL 的执行计划是一个树形结构(Tree of Plan Nodes)[reference:2]。每个节点代表一个具体的操作——扫描表、排序、聚合、连接等。阅读执行计划需要遵循两条核心原则:

  1. 自底向上(Bottom-Up):下层节点的输出作为上层节点的输入。
  2. 从左往右(Left-to-Right):同一层级中,先执行左边的节点。

以一个典型的执行计划为例:

Sort  (cost=163.67..168.14 rows=1787 width=14)
  ->  HashAggregate  (cost=67.23..85.10 rows=1787 width=14)
        ->  Seq Scan on customers  (cost=0.00..34.19 rows=1719 width=14)

在这个计划中,Seq Scan on customers 是最底层节点,它顺序扫描 customers 表并将结果行传递给上层 HashAggregate 节点进行哈希聚合,最终由 Sort 节点完成排序[reference:3]。

EXPLAIN 输出字段详解

一个标准的 EXPLAIN 输出包含以下关键字段:

字段含义
cost预估成本,格式为 startup_cost..total_cost
rows预估返回的行数
width预估每行的平均字节数
actual time(EXPLAIN ANALYZE)实际执行时间(毫秒)
actual rows(EXPLAIN ANALYZE)实际返回的行数
loops(EXPLAIN ANALYZE)节点被执行的次数
Buffers(EXPLAIN (BUFFERS))缓冲区命中与读取情况
Planning Time规划阶段耗时
Execution Time执行阶段总耗时

EXPLAIN 输出中的 cost 是优化器选择执行计划的核心依据[reference:4]。startup_cost 表示返回第一行之前的启动成本,total_cost 表示返回所有行的总成本[reference:5]。对于大多数查询,优化器以最小化 total_cost 为目标;但在 EXISTS 子查询等场景中,优化器会优先选择 startup_cost 最小的计划[reference:6]。

成本模型:优化器的决策依据

PostgreSQL 的优化器通过成本模型(Cost Model) 来评估不同执行路径的代价,并选择成本最低的方案[reference:7]。成本是一个无量纲的相对值(measured in arbitrary units),其绝对值没有物理意义,只有相对值影响优化器的决策[reference:8]。

核心成本参数

PostgreSQL 提供了一系列 GUC 参数来控制成本计算[reference:9]。以下是最关键的几个:

参数默认值含义
seq_page_cost1.0顺序读取一个数据页的成本[reference:10]
random_page_cost4.0随机读取一个数据页的成本[reference:11]
cpu_tuple_cost0.01处理每一行的 CPU 成本[reference:12]
cpu_index_tuple_cost0.005索引扫描中处理每个索引条目的 CPU 成本[reference:13]
cpu_operator_cost0.0025执行每个操作符或函数的 CPU 成本[reference:14]

默认情况下,random_page_cost 是 seq_page_cost 的 4 倍[reference:15]。这一设定基于传统机械硬盘(HDD)的物理特性——随机 I/O 远慢于顺序 I/O。

成本参数的调优实践

随着存储技术的发展(SSD、NVMe),随机 I/O 与顺序 I/O 的性能差距已大幅缩小。因此,在生产环境中调优 random_page_cost 是常见的优化手段:

  • SSD:建议设置为 1.5 ~ 2.0
  • NVMe:建议设置为 1.1 ~ 1.3
-- 查看当前成本参数
SELECT name, setting, unit 
FROM pg_settings 
WHERE name LIKE '%cost%';

-- 调整 random_page_cost(需 superuser 权限)
ALTER SYSTEM SET random_page_cost = 1.5;
SELECT pg_reload_conf();

需要注意的是,random_page_cost 不应低于 seq_page_cost[reference:16]。如果数据库完全缓存于 RAM 中,可将两者设为相等[reference:17]。

统计信息:行数估算的数据基础

优化器要做出准确的成本估算,必须依赖统计信息(Statistics)。PostgreSQL 通过 ANALYZE 命令(或后台 autovacuum 进程)收集表和列的统计信息[reference:18]。

核心统计信息视图:pg_stats

pg_stats 视图提供了对 pg_statistic 系统表中统计信息的可读访问[reference:19]。关键字段包括:

字段含义
null_frac列中 NULL 值的比例
avg_width列值的平均字节宽度
n_distinct估算的不同值数量
most_common_vals最常见值的列表
most_common_freqs最常见值对应的频率
histogram_bounds直方图边界值
-- 查看表的统计信息
SELECT 
    attname,
    null_frac,
    avg_width,
    n_distinct,
    most_common_vals,
    most_common_freqs,
    histogram_bounds
FROM pg_stats 
WHERE tablename = 'your_table' 
  AND attname = 'your_column';

选择率的计算

选择率(Selectivity) 是 WHERE 条件过滤后返回的行数占总行数的比例[reference:20]。PostgreSQL 根据统计信息计算选择率,再用选择率乘以表的总行数(reltuples,来自 pg_class)得出估算行数[reference:21]。

等值条件(column = value) :如果该值出现在 most_common_vals 中,直接取对应的 most_common_freqs 作为选择率[reference:22]。

范围条件(column < value) :通过 histogram_bounds 直方图进行插值计算[reference:23]。例如,直方图将数据分为 100 个等频桶,目标值所在的桶位置决定了选择率。

统计信息的时效性

过期的统计信息会导致优化器做出错误决策。可通过 pg_stat_all_tables 视图检查统计信息的收集时间:

SELECT 
    schemaname,
    tablename,
    last_analyze,
    last_autoanalyze
FROM pg_stat_all_tables 
WHERE tablename = 'your_table';

如果 last_analyze 或 last_autoanalyze 时间过早,说明统计信息可能已过时,建议手动执行 ANALYZE。

多元统计信息:解决关联列估算失真

PostgreSQL 优化器默认假设不同列之间的条件是相互独立的[reference:24]。对于多列条件(如 WHERE col1 = a AND col2 = b),优化器会将各列的选择率相乘得出总选择率。

-- 假设两列的选择率均为 0.08
-- 总选择率 = 0.08 × 0.08 = 0.0064
-- 若表有 10000 行,估算行数 = 64
-- 但实际满足两条件的有 8000 行 → 严重低估!

当列之间存在函数依赖(Functional Dependency)时,这种独立性假设会导致估算严重失真[reference:25]。PostgreSQL 从 10 版本开始引入了多元统计信息(Extended Statistics) 来解决此问题[reference:26][reference:27]。

CREATE STATISTICS

CREATE STATISTICS 命令用于创建扩展统计信息对象[reference:28]。支持的统计类型包括[reference:29][reference:30]:

  • ndistinct —— 多列组合的不同值数量统计
  • dependencies —— 函数依赖统计
  • mcv —— 多列最常见值列表
-- 创建函数依赖统计信息
CREATE STATISTICS stat_place_community (dependencies) 
ON place_name, community_name FROM your_table;

-- 分析表以生成统计信息
ANALYZE your_table;

-- 查看已创建的统计信息对象
SELECT * FROM pg_statistic_ext;

创建多元统计信息后,优化器在进行多列条件估算时会使用更精确的选择率,避免将两个相关列的选择率简单相乘[reference:31]。

版本支持说明

功能引入版本
多元统计信息(ndistinct、dependencies、mcv)PostgreSQL 10
表达式统计信息(Expression Statistics)PostgreSQL 14

在 PostgreSQL 14 及更高版本中,CREATE STATISTICS 还支持基于表达式的统计信息收集[reference:32]。

执行计划可视化工具

当执行计划非常复杂(数百行)时,纯文本阅读效率低下。以下工具可将执行计划可视化,帮助快速定位高消耗节点:

PEV2(PostgreSQL Explain Visualizer 2)

PEV2 是一个基于 Vue.js 的执行计划可视化组件[reference:33]。

  • 在线版:https://explain.dalibo.com/ [reference:34]
  • GitHub:https://github.com/dalibo/pev2 [reference:35]

PEV2 的核心价值在于:

  1. 图形化展示:将树形结构以节点图呈现,点击节点可查看详情
  2. 耗时占比:直观显示每个节点占总执行时间的百分比
  3. 估算偏差标注:自动标记 underestimate(低估)和 overestimate(高估)的节点

其他工具

  • Depesz(https://explain.depesz.com/):老牌执行计划分析工具,提供索引建议
  • PGBadger:日志分析工具,可汇总执行计划信息

API 速览

EXPLAIN

所属:PostgreSQL SQL 命令

语法:

EXPLAIN [ ( option [, ...] ) ] statement

常用选项:

  • ANALYZE:实际执行语句并显示真实执行统计[reference:36]
  • BUFFERS:显示缓冲区使用情况[reference:37]
  • COSTS:显示成本估算(默认开启)[reference:38]
  • VERBOSE:显示额外详细信息[reference:39]
  • FORMAT { TEXT | XML | JSON | YAML }:输出格式[reference:40]

示例:

EXPLAIN (ANALYZE, BUFFERS, COSTS) 
SELECT * FROM orders WHERE customer_id = 12345;

CREATE STATISTICS

所属:PostgreSQL DDL 命令

语法:

CREATE STATISTICS [ IF NOT EXISTS ] statistics_name 
    [ ( statistics_kind [, ...] ) ] 
    ON column_name, column_name [, ...] 
    FROM table_name;

statistics_kind 取值:

  • ndistinct:多列组合的不同值数量
  • dependencies:函数依赖
  • mcv:多列最常见值列表[reference:41]

示例:

CREATE STATISTICS stat_customer_city (dependencies) 
ON customer_id, city FROM customers;

ANALYZE customers;

pg_settings

所属:PostgreSQL 系统视图

用途:查看和修改配置参数

示例:

-- 查看成本相关参数
SELECT name, setting, unit, context 
FROM pg_settings 
WHERE name LIKE '%cost%' 
ORDER BY name;

pg_stats

所属:PostgreSQL 系统视图

用途:查看列级别的统计信息[reference:42]

示例:

SELECT 
    schemaname,
    tablename,
    attname,
    null_frac,
    avg_width,
    n_distinct,
    most_common_vals,
    most_common_freqs,
    histogram_bounds
FROM pg_stats 
WHERE tablename = 'products' 
  AND attname = 'price';

pg_stat_all_tables

所属:PostgreSQL 系统视图

用途:查看表的统计信息收集时间

示例:

SELECT 
    relname,
    last_analyze,
    last_autoanalyze,
    seq_scan,
    seq_tup_read,
    idx_scan,
    idx_tup_fetch
FROM pg_stat_all_tables 
WHERE relname = 'orders';

Demo 简单示例

本 Demo 演示如何通过 EXPLAIN ANALYZE 分析查询性能,并通过 CREATE STATISTICS 解决多列估算失真问题。

环境准备

-- 创建测试表
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INTEGER NOT NULL,
    product_category VARCHAR(50) NOT NULL,
    order_date DATE NOT NULL,
    amount NUMERIC(10,2)
);

-- 插入测试数据(10000 行)
INSERT INTO orders (customer_id, product_category, order_date, amount)
SELECT 
    (random() * 100)::INTEGER,
    (ARRAY['Electronics', 'Clothing', 'Books', 'Food', 'Toys'])[(random() * 4 + 1)::INTEGER],
    CURRENT_DATE - (random() * 365)::INTEGER,
    (random() * 1000)::NUMERIC(10,2)
FROM generate_series(1, 10000);

-- 收集统计信息
ANALYZE orders;

问题查询

-- 查询特定客户在特定类别的订单
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders 
WHERE customer_id = 42 
  AND product_category = 'Electronics';

在未创建多元统计信息时,优化器可能严重低估满足两个条件的行数。

创建多元统计信息

-- 创建函数依赖统计
CREATE STATISTICS stat_orders_customer_category (dependencies) 
ON customer_id, product_category FROM orders;

-- 重新收集统计信息
ANALYZE orders;

-- 再次执行查询
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders 
WHERE customer_id = 42 
  AND product_category = 'Electronics';

运行说明

  1. 在 PostgreSQL 10+ 数据库中执行上述 SQL
  2. 对比创建多元统计信息前后的 EXPLAIN ANALYZE 输出中的 rows 估算值
  3. 观察估算行数是否更接近实际行数

技术点总结

  • EXPLAIN ANALYZE 输出执行计划的估算值与实际值
  • 多列条件在默认情况下存在估算失真
  • CREATE STATISTICS 创建多元统计信息可显著提升估算准确性
  • pg_stats 和 pg_stat_all_tables 用于查看统计信息状态

项目难点与解决方案

核心难点

多列关联导致的估算失真:PostgreSQL 优化器默认假设不同列的条件相互独立,将各列选择率相乘得出总选择率。当列之间存在函数依赖时,这种假设会导致行数严重低估,进而引发错误的连接方法选择(如 Nest Loop 替代 Hash Join),最终导致查询性能急剧下降[reference:43]。

解决方案

使用 CREATE STATISTICS 创建多元统计信息,具体包括:

  1. 函数依赖统计(dependencies) :捕捉列之间的函数依赖关系
  2. 多列 MCV 统计(mcv) :记录多列组合的最常见值及其频率
  3. 多列 NDISTINCT 统计(ndistinct) :记录多列组合的不同值数量

创建后执行 ANALYZE 使统计信息生效,优化器将使用更精确的选择率进行估算[reference:44]。

广度

该问题影响所有涉及多列条件的查询,包括:

  • 多列 WHERE 条件
  • 多列 GROUP BY
  • 多列 JOIN 条件
  • 多列 DISTINCT

深度

解决该问题需要理解:

  • PostgreSQL 优化器的成本模型与统计信息机制
  • 选择率的计算原理与独立性假设的局限性
  • 多元统计信息的不同类型及其适用场景
  • ANALYZE 的执行时机与统计信息更新策略

复杂度

  • 诊断复杂度:需要通过 EXPLAIN ANALYZE 对比估算行数与实际行数,识别估算失真节点
  • 实施复杂度:CREATE STATISTICS 语法简单,但需要选择正确的统计类型(dependencies、mcv 或 ndistinct)
  • 维护复杂度:统计信息会随数据变更而老化,需确保 autovacuum 正常运作或定期执行 ANALYZE

官方文档

参考链接

总结

本文系统梳理了 PostgreSQL 执行计划的核心概念与优化器的工作原理。执行计划作为树形结构,遵循自底向上、从左往右的阅读规则。优化器基于成本模型选择执行路径,其中 seq_page_cost 与 random_page_cost 是影响索引选择的关键参数,尤其在 SSD/NVMe 时代需要进行针对性调优。

统计信息是行数估算的数据基础,pg_stats 视图提供了 histogram_bounds、most_common_vals 等关键信息。针对多列关联导致的估算失真问题,PostgreSQL 10+ 提供了 CREATE STATISTICS 多元统计信息功能,可有效提升优化器估算精度。在实际调优中,结合 EXPLAIN ANALYZE 与 PEV2 等可视化工具,可快速定位高消耗节点与估算偏差,实现高效的 SQL 性能优化。

PostgreSQL执行计划深度解析:从EXPLAIN到性能优化实战 在数据库性能优化领域,执行计划是理解SQL查询执行过程的核心工具。其原理是数据库优化器根据统计信息生成的数据访问路径方案,决定了表扫描、连接、排序等操作的执行顺序与方式。这项技术的价值在于将查询性能从“黑盒”变为“白盒”,使开发者能精准定位瓶颈,如识别全表扫描、索引失效或连接策略不当等问题。在应用场景上,无论是线上慢查询诊断、开发阶段SQL设计,还是索引策略制定,执行计划分析都是关键环节。通过掌握EXPLAIN、EXPLAIN ANALYZE等命令,结合对Seq Scan、Hash Join等节点的解读,可 阅读详情

相关推荐

PostgreSQL执行计划解析与性能优化实战

执行计划是数据库优化器的核心决策输出,通过树形结构展示SQL语句的执行路径。其生成过程涉及语法解析、重写优化和成本评估等关键阶段,最终选择预估成本最低的方案。理解执行计划对性能调优至关重要,能帮助开发者识别全表扫描、低效连接等常见瓶颈。在PostgreSQL中,EXPLAIN命令配合ANALYZE、BUFFERS等选项可获取详细执行信息,而索引优化、统计信息更新和参数调整是典型的优化手段。实际工程中,执行计划分析常用于慢查询诊断、分区表优化和并行查询调优等场景,结合可视化工具能显著提升DBA的工作效率。

weixin_30846347的博客 277

PostgreSQL 常用客户端工具

【代码】PostgreSQL 常用客户端工具。

文牧之的博客 5180

PostgreSQL执行计划深度解析:从原理到实战的性能调优指南

在数据库性能优化领域,执行计划是理解查询行为、定位性能瓶颈的核心诊断工具。它本质上是查询优化器基于成本模型生成的决策报告,通过展示数据访问路径、连接策略和操作成本,为SQL调优提供科学依据。掌握执行计划的分析能力,能帮助开发者从‘会写SQL’进阶到‘懂SQL’,从而在工程实践中显著提升查询效率与系统稳定性。无论是处理高并发OLTP场景还是复杂分析查询,精准解读执行计划都能有效应对索引失效、连接顺序不佳、统计信息偏差等常见问题。本文以PostgreSQL为例,结合索引扫描、哈希连接等热词,深入剖析执行计划的获

优快云头条 570

pgadmin4|postgresql数据库|pg数据库的可视化管理工具神器

如果您是一名专注于 Postgres 的 DBA,PgAdmin 是一个绝佳选择。也就是说,对分布式服务器的需求通常只出现在能够处理这种配置的熟练开发人员身上。pgAdmin 通常被新手和经验丰富的 DBA 和开发人员用于数据库管理。PgAdmin 有很好的社区支持,如果您遇到问题,有很多资源可以帮助您。通常,pgAdmin 在很大程度上满足了许多开发人员的需求,因此,大多数开发人员不会寻找其他 GUI 工具。

zsk_john的技术分享专用博客 5999

数据库查询优化器实战:选择与连接运算的3种代价估算模型对比

本文深入解析数据库查询优化器中3种代价估算模型,重点对比选择运算和连接运算在不同场景下的性能表现。通过全表扫描、索引扫描及哈希连接等实例,揭示物理I/O成本、内存利用率和索引选择策略对查询效率的影响,为DBA和开发者提供实用的优化指导。

weixin_34082854的博客 451

PostgreSQL执行计划解析与优化实战指南

数据库执行计划是SQL查询优化的核心工具,它展示了查询优化器选择的访问路径和数据处理方式。PostgreSQL通过EXPLAIN命令生成树形结构的执行计划,其中每个节点代表一个操作算子。理解执行计划需要掌握关键指标:cost表示操作成本,rows是预估返回行数,width是行平均宽度。通过EXPLAIN ANALYZE可以获取实际执行数据,结合BUFFERS参数还能分析I/O情况。常见的优化手段包括创建合适的索引、维护准确的统计信息、重写低效查询等。执行计划分析能有效解决全表扫描、连接效率低、内存不足等典型

weixin_33393017的博客 17

Windows 下 PostgreSQL 图形化界面安装、配置详解

这里给大家解释一下这几个组件,首先 PostgreSQL Server 相信大家都知道,这个就是数据库的服务端程序,所以我们肯定要安装,后续的数据都是通过这个组件组织存放的。接着是pgAdmin4 这个组件,顾名思义它是PG的 一个图形化界面管理工具,可以链接PG的服务端,也就类似navicat那种,至于Stack Builder 组件是用来下载额外需要的扩展包的。好了,关于PG 在Windows 下的环境搭建 就先到这里了,后面给大家继续介绍在Linux环境上搭建PG服务,以及PG的一些基本的用法。

代码洁癖症患者 2万+

什么是执行计划,如何查看执行计划?

上一篇我们介绍了触发器的概念和作用,演示了如何使用触发器实现自动的数据审计。到目前为止,我们已经学习了许多 SQL 基础查询、高级分析以及数据库设计和开发的实用技能。 今天我们开始扩展篇的学习。首先,让我们深入到数据库服务器的内部,探索一下 SQL 查询的执行过程。 SQL 查询执行过程 不同数据库对于 SQL 语句的执行过程采用了各自的实现方式;我们虽然不能通过一篇文章涵盖这些实现细节,但是可以...

Tony.Dong的专栏 2634

postgresql执行计划

用于测试分析、SQL调优

m0_61066945的博客 8677

医疗领域BGE-M3模型微调全流程:从数据准备到效果评估

本文详细介绍了医疗领域BGE-M3模型的微调全流程,从数据准备到效果评估。通过医疗数据微调,BGE-M3模型在临床问答、病历检索等场景中表现显著提升,能够准确理解医学术语之间的细微差别。文章还提供了实战练习代码和效果评估指标,帮助开发者快速掌握医疗文本嵌入模型的应用技巧。

weixin_29098367的博客 283

Matlab实战:用递归最小二乘法(RLS)搞定动态系统参数辨识(附完整代码)

本文通过Matlab实战,详细介绍了如何利用递归最小二乘法(RLS)进行动态系统参数辨识。文章从理论优势切入,提供了完整的仿真数据生成、RLS算法核心实现代码,并对参数收敛过程、预测误差及不同遗忘因子的影响进行了可视化分析与性能评估,为工程实践提供了清晰的指南。

weixin_29035405的博客 504

PostgreSQL执行计划详解与优化实战

数据库执行计划是SQL查询优化的核心工具,它展示了查询处理器访问数据的路径选择。PostgreSQL通过成本模型评估不同执行路径,考虑CPU、I/O和内存等资源消耗,生成最优查询计划。执行计划分析能有效识别全表扫描、连接顺序不当等性能瓶颈,指导索引优化和查询重写。通过EXPLAIN和EXPLAIN ANALYZE命令,开发者可以获取查询的预估和实际执行情况,结合BUFFERS选项分析内存使用效率。在生产环境中,合理利用执行计划分析可以显著提升复杂查询性能,特别是在处理大数据量表连接、子查询优化等场景时效果尤

weixin_31960565的博客 218

手把手教你用闲置安卓手机搭建个人收款系统(蓝鲸支付私有化部署实战)

本文详细介绍了如何利用闲置安卓手机搭建个人收款系统,实现私有化支付部署。通过开源技术栈和容器化方案,零成本构建安全、高效的支付网关,解决传统支付平台的数据安全和资金风险问题。特别适合个人开发者和小微企业主,无需复杂审批,资金实时到账,显著降低运营成本。

weixin_30363285的博客 383

pgrust 查询执行器剖析:从解析器到执行计划的全链路

pgrust 是一个用 Rust 重写 PostgreSQL 的开源项目,目标是让经典数据库内核焕发新生。它的查询执行器完整复刻了 Postgres 从解析、分析、优化到执行的全链路流程,并已通过超过 46000 条回归测试。这篇文章将带你以一条普通 SQL 为例,一步步拆解 pgrust 查询执行器内部发生了什么,适合想理解数据库内核的初学者和普通开发者阅读。 ## 为什么查询执行器是数据库的

gitblog_00588的博客 355

立创EDA手动拼板实战:当自带功能不够用,如何用‘复制粘贴’搞定异形拼版与特殊布局

本文详细介绍了立创EDA手动拼板技术在异形拼版与特殊布局中的应用实战。通过CTRL+SHIFT+V等核心操作技巧,解决混合尺寸拼板、特殊间距需求等复杂场景,提升PCB设计效率与灵活性,特别适合需要高精度控制的射频电路和医疗设备项目。

weixin_31967485的博客 390

Chapter 19 Digital Phase-Locked Loops

数字锁相环 Digital Phase-Locked Loops, 就是根据原来时钟信号, 产生新的时钟信号, which is locked or synchronized. (align 参考时钟边沿 or 在中间)

2304_76736886的博客 973

postgresql数据库执行计划图文详解例子解析

每个节点的输出都提供了关于该操作的详细信息,包括成本估计、行数估计、条件以及它是如何与其他节点相关联的。要深入了解执行计划的各个方面,包括不同的节点类型、成本估计以及如何解读它们,你可以查阅PostgreSQL的官方文档。在PostgreSQL中,执行计划是数据库查询优化器生成的,它详细说明了如何执行一个特定的SQL语句。不仅显示计划,还会实际执行查询,并显示实际运行时间的统计信息。这将执行查询,并在执行计划中包括实际的运行时间统计信息。是一个用来显示这个执行计划的命令,而。是一个嵌套循环连接,

IT老农民的博客 930

Unity VR 零基础开发之 Pico4 MR

2、弹出弹窗后,点击Android选项,然后再点击Switch Platform按钮切换成安卓平台。3、切换完成后Android选项后面会显示unity图标。

十画的博客 5118

PostgreSQL执行计划深度解析:从原理到实战优化慢查询

在数据库性能优化领域,执行计划是理解SQL语句执行路径的核心工具。它本质上是数据库优化器生成的一份详细指令集,揭示了数据访问、连接、排序等操作的具体步骤与成本估算。掌握执行计划的分析能力,对于定位性能瓶颈、设计高效索引和数据模型具有极高的技术价值,尤其在处理高并发在线事务处理(OLTP)和复杂分析查询场景时至关重要。本文聚焦于PostgreSQL数据库,通过解读执行计划中的关键节点如顺序扫描、索引扫描及哈希连接,并结合慢查询优化与索引设计等热词,指导开发者从实战角度将理论应用于性能调优,从而系统性提升数据库

weixin_30570101的博客 415

基于YOLOv12的牙齿识别与计数系统:从理论到完整实现

本文详细介绍了一种基于YOLOv12深度学习模型的牙齿识别与计数系统。该系统能够在口腔X光片中准确识别和计数牙齿,并提供了用户友好的UI界面。文章涵盖了数据预处理、模型训练、性能优化以及完整系统实现的各个环节,并提供了可复现的代码和数据集参考。整个系统包含三个主要模块:数据预处理模块YOLOv12模型训练模块UI界面展示模块。

YOLO 180

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 733

PostgreSQL执行计划优化实战指南

数据库查询优化是提升系统性能的关键环节,其中执行计划分析是最基础也最有效的优化手段。执行计划作为SQL语句在数据库引擎中的执行路线图,通过可视化查询处理过程,帮助开发者识别性能瓶颈。在PostgreSQL中,通过EXPLAIN命令可以获取详细的执行计划信息,包括索引使用情况、连接方式和成本估算等核心指标。理解Seq Scan、Index Scan、Hash Join等常见操作类型的工作原理,能够快速定位全表扫描、错误连接顺序等典型性能问题。结合统计信息维护和pg_hint_plan等工具的使用,可以系统性地

weixin_29895109的博客 3

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

PostgreSQL——SQL优化

本文介绍了PostgreSQL数据库SQL优化的关键方法。首先通过EXPLAIN命令分析执行计划,重点关注执行顺序、核心指标(cost、rows、width等)和扫描方式(Seq Scan、Index Scan等)。其次解析不同连接方式(Nested Loop、Hash Join等)的适用场景及风险。最后提出实战分析步骤:定位耗时查询、检查统计偏差、优化扫描方式、减少I/O操作等。

小新没有蜡笔的博客 914

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PostgreSQL执行计划详解与性能调优实战

执行计划是数据库优化器生成的查询路径方案,通过成本模型选择最优执行方式。理解执行计划的工作原理是SQL性能调优的基础,它能有效避免无效索引等常见误区。在PostgreSQL中,通过EXPLAIN命令可以查看查询的执行计划,分析关键指标如cost、rows和width。实际工程中,执行计划分析常用于解决索引失效、分页查询优化等高频问题场景。结合统计信息维护和参数调优,可以显著提升如电商平台商品搜索等关键业务的查询性能。

weixin_31188927的博客 59

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PostgreSQL如何查看带有绑定变量SQL的通用执行计划

当我们在PostgreSQL中分析一些历史的SQL问题时,往往看到的SQL都是带有绑定变量的。不仅如此,对于这些带有绑定变量的SQL,我们甚至没法像在Oracle中一样获取一个预估的执行计划。当然还有点需要注意的,如果估计成本高于先前执行的平均成本时就不会选择通用计划了,所以我们可以人为的控制前5次的平均成本,让其达到一个很高的值,这一点我们可以增加cpu_operator_cost的值来实现。我们似乎只能去通过带入值去获取相应的执行计划了,这对于那些绑定变量很多的SQL来说无疑是十分繁琐的。

Focus on PostgreSQL 1362

PostgreSQL hint用法(兼容oracle)

Hint是Oracle数据库中很有特色的一个功能,pg和oracle的优化器一样也是CBO(基于成本的)。但是在pg中是没有hint的,但是我们可以去通过设置成本因子,设置优化器开关等方式来"建议"数据库按照我们的想法去生成执行计划,但是并不能强制,例如: bill=# explain select * from t1; QUERY PLAN ...

Focus on PostgreSQL 6490
上一篇: PostgreSQL笔记35:索引常见问题诊断与解决方案全景解析
下一篇: PostgreSQL笔记37:数据库性能瓶颈排查方法论与工具链
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值