2025-10-22 postgresql 基础入门 , 连接类型 , 查询优化 , 连接算法 , SQL语法 , 数据库性能 , LATERAL子查询 13 分钟阅读PostgreSQL连接的那些弯弯绕:笛卡尔积、外连接和LATERAL你都理明白没?PostgreSQL支持多种连接类型,包括交叉连接(CROSS JOIN)、内连接(INNER JOIN)和外连接(LEFT/RIGHT/FULL OUTER JOIN)。交叉连接生成笛卡尔积,内连接仅保留匹配行,外连接保留未匹配行并用NULL填充。USING和NATURAL JOIN可简化连接条件。连接顺序影响性能,建议优先连接小结果集的表。LATERAL …阅读更多 cmdragon
2025-10-21 postgresql 基础入门 , 子查询 , 连接优化 , SQL性能优化 , LATERAL连接 , 查询改写 16 分钟阅读子查询总拖慢查询?把它变成连接就能解决?子查询是嵌套在其他SQL语句中的查询,分为标量、行、列和表子查询。相关子查询依赖外部查询变量,性能较差,而非相关子查询独立执行。PostgreSQL优化器通过子查询扁平化将子查询转换为更高效的连接操作。连接操作包括内连接、外连接和交叉连接,优化器基于成本模型选择连接顺序和方法,如嵌套循环、哈希和排序合并连接。通过改写子查询为连接或使用LATERAL连接,可以 …阅读更多 cmdragon
2025-10-20 postgresql 基础入门 , 全表扫描 , 查询优化 , 索引创建 , 查询规划器 , SQL性能 , 统计信息 13 分钟阅读PostgreSQL全表扫描慢到崩溃?建索引+改查询+更统计信息三招能破?全表扫描在PostgreSQL中会逐行读取表数据,适用于小表,但对大表会导致性能问题。查询规划器通过生成候选计划、计算代价并选择最优执行计划来优化查询。避免全表扫描的核心是为关键列创建索引,如WHERE子句、JOIN条件和排序/分组列。查询语句应避免前缀通配符、列函数和隐式类型转换,使用显式JOIN。统计信息的准确性对规划器决策至关重要,可通过ANALYZE …阅读更多 cmdragon
2025-10-19 postgresql 基础入门 , 多列索引 , 覆盖索引 , 仅索引扫描 , B-tree索引 , INCLUDE子句 , 查询优化 13 分钟阅读复杂查询总拖后腿?PostgreSQL多列索引+覆盖索引的神仙技巧你get没?多列索引在PostgreSQL中用于优化包含多列条件的查询,支持B-tree、GiST、GIN和BRIN四种索引类型。B-tree索引遵循左前缀原则,适合等值或等值+范围查询;GiST索引首列选择性影响效率,适合空间数据;GIN索引无左前缀限制,适合多值类型查询;BRIN索引适合大表范围查询。覆盖索引通过INCLUDE子句包含查询所需列,避免回表,提升查询效 …阅读更多 cmdragon
2025-10-18 postgresql 基础入门 , 表达式索引 , 数据库优化 , PostgreSQL , 索引维护 , 查询性能 , 数据库索引 13 分钟阅读只给表子集建索引?用函数结果建索引?PostgreSQL这俩操作凭啥能省空间又加速?部分索引是建立在表子集上的索引,通过条件表达式定义,仅包含满足条件的行。其优势在于体积小、维护成本低、查询匹配精准。典型应用包括排除常见值、优化高频查询、实现部分唯一约束及修正错误查询计划。表达式索引则基于函数或标量表达式的结果,预存常用计算逻辑,加快查询速度,适用于查询频率远高于更新频率的场景。两者均能显著提升数据库性能,但需注意避免滥用部分索引替代分区表 …阅读更多 cmdragon
2025-10-17 postgresql 基础入门 , B-tree索引 , 数据库优化 , 索引原理 , 查询加速 , 适用场景 , 常见报错 12 分钟阅读B-tree索引像字典查词一样工作?那哪些数据库查询它能加速,哪些不能?B-tree索引是PostgreSQL默认的索引类型,通过分层结构(根节点、分支节点、叶子节点)快速定位数据,时间复杂度为O(log n)。它支持比较操作符(如=、>)、范围查询(如BETWEEN)、空值判断(如IS NULL)以及锚定开头的模式匹配(如LIKE 'foo%')。适用场景包括加速“等于”查询(如用户登录)、范围查询(如订单统计)和空值查 …阅读更多 cmdragon