基础入门

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

PostgreSQL连接的那些弯弯绕:笛卡尔积、外连接和LATERAL你都理明白没?

PostgreSQL支持多种连接类型,包括交叉连接(CROSS JOIN)、内连接(INNER JOIN)和外连接(LEFT/RIGHT/FULL OUTER JOIN)。交叉连接生成笛卡尔积,内连接仅保留匹配行,外连接保留未匹配行并用NULL填充。USING和NATURAL JOIN可简化连接条件。连接顺序影响性能,建议优先连接小结果集的表。LATERAL …

子查询总拖慢查询?把它变成连接就能解决?

子查询是嵌套在其他SQL语句中的查询,分为标量、行、列和表子查询。相关子查询依赖外部查询变量,性能较差,而非相关子查询独立执行。PostgreSQL优化器通过子查询扁平化将子查询转换为更高效的连接操作。连接操作包括内连接、外连接和交叉连接,优化器基于成本模型选择连接顺序和方法,如嵌套循环、哈希和排序合并连接。通过改写子查询为连接或使用LATERAL连接,可以 …

PostgreSQL全表扫描慢到崩溃?建索引+改查询+更统计信息三招能破?

全表扫描在PostgreSQL中会逐行读取表数据,适用于小表,但对大表会导致性能问题。查询规划器通过生成候选计划、计算代价并选择最优执行计划来优化查询。避免全表扫描的核心是为关键列创建索引,如WHERE子句、JOIN条件和排序/分组列。查询语句应避免前缀通配符、列函数和隐式类型转换,使用显式JOIN。统计信息的准确性对规划器决策至关重要,可通过ANALYZE …
广告位

复杂查询总拖后腿?PostgreSQL多列索引+覆盖索引的神仙技巧你get没?

多列索引在PostgreSQL中用于优化包含多列条件的查询,支持B-tree、GiST、GIN和BRIN四种索引类型。B-tree索引遵循左前缀原则,适合等值或等值+范围查询;GiST索引首列选择性影响效率,适合空间数据;GIN索引无左前缀限制,适合多值类型查询;BRIN索引适合大表范围查询。覆盖索引通过INCLUDE子句包含查询所需列,避免回表,提升查询效 …

只给表子集建索引?用函数结果建索引?PostgreSQL这俩操作凭啥能省空间又加速?

部分索引是建立在表子集上的索引,通过条件表达式定义,仅包含满足条件的行。其优势在于体积小、维护成本低、查询匹配精准。典型应用包括排除常见值、优化高频查询、实现部分唯一约束及修正错误查询计划。表达式索引则基于函数或标量表达式的结果,预存常用计算逻辑,加快查询速度,适用于查询频率远高于更新频率的场景。两者均能显著提升数据库性能,但需注意避免滥用部分索引替代分区表 …

B-tree索引像字典查词一样工作?那哪些数据库查询它能加速,哪些不能?

B-tree索引是PostgreSQL默认的索引类型,通过分层结构(根节点、分支节点、叶子节点)快速定位数据,时间复杂度为O(log n)。它支持比较操作符(如=、>)、范围查询(如BETWEEN)、空值判断(如IS NULL)以及锚定开头的模式匹配(如LIKE 'foo%')。适用场景包括加速“等于”查询(如用户登录)、范围查询(如订单统计)和空值查 …
广告位