基础入门

标签下的所有文章 29 篇文章
返回所有标签

PostgreSQL 查询慢?是不是忘了优化 GROUP BY、ORDER BY 和窗口函数?

GROUP BY用于分组聚合,将相同值的行归为一组并计算聚合函数。PostgreSQL支持功能依赖优化,若GROUP BY列为主键或唯一约束,其他依赖列无需加入GROUP BY。GROUPING SETS、CUBE、ROLLUP可一次性生成多组聚合,提升效率。HAVING用于过滤分组结果,WHERE过滤原始行。ORDER BY性能依赖索引,Top-N查询可使 …

PostgreSQL里的子查询和CTE居然在性能上“掐架”?到底该站哪边?

子查询和CTE(公共表表达式)是SQL中处理复杂查询的两种常用方法。子查询嵌套在其他查询中,分为非相关子查询(独立执行)和相关子查询(依赖外部查询)。CTE通过WITH子句定义,生成临时结果集,支持物化(默认生成临时表)和递归查询。CTE的优势在于多次引用时避免重复计算,但会增加I/O开销;子查询则通过优化器融合,利用索引提高性能。递归查询是CTE的独占场景 …

PostgreSQL选Join策略有啥小九九?Nested Loop/Merge/Hash谁是它的菜?

PostgreSQL中的连接查询(JOIN)通过查询优化器选择成本最低的执行策略,主要包含三种Join策略:Nested Loop Join、Merge Join和Hash Join。Nested Loop Join适用于小表或内层表有索引的场景;Merge Join适合两个表Join键都有有序索引的情况;Hash Join则用于大表与小表的连接,通过构建 …

PostgreSQL新手SQL总翻车?这7个性能陷阱你踩过没?

PostgreSQL查询执行流程包括词法分析、语法分析、查询重写、查询规划器和执行器,其中查询规划器根据统计信息选择成本最低的执行计划。常见性能陷阱包括忽略索引导致全表扫描、函数/表达式导致索引失效、隐式类型转换破坏索引、复合索引顺序错误、不必要的SELECT *、JOIN操作笛卡尔积与顺序错误,以及CTE的“优化围栏”问题。通过EXPLAIN …

PostgreSQL索引选B-Tree还是GiST?“瑞士军刀”和“多面手”的差别你居然还不知道?

索引是PostgreSQL中优化查询性能的核心工具,本质是表数据的“快速查找目录”,减少磁盘IO次数。B-Tree是默认索引类型,适用于等值查询、范围查询和排序,结构为自平衡树,查询时间稳定。GiST是高级索引类型,支持复杂数据类型和查询场景,如空间数据查询和全文搜索。选择索引时需结合查询需求、数据类型和维护成本,B-Tree适合常规查询,GiST适合复杂查 …

PostgreSQL处理SQL居然像做蛋糕?解析到执行的4步里藏着多少查询优化的小心机?

PostgreSQL处理SQL查询的过程分为解析、重写、规划和执行四个阶段。解析阶段将SQL字符串转换为解析树,重写阶段处理视图和规则,规划阶段选择最优执行计划,执行阶段按计划执行查询。代价模型通过计算IO和CPU成本来优化查询,统计信息影响成本计算的准确性。使用索引、选择合适的连接方式和提前过滤数据是优化查询的关键。定期更新统计信息和合理使用索引可避免性能 …