- 博客(100)
- 资源 (8)
- 收藏
- 关注
原创 联合索引列顺序:PostgreSQL 区分度高的列放前面
在PostgreSQL中,联合索引列顺序直接影响查询性能。核心原则:等值条件列优先于范围条件列,区分度高的列放前面。通过COUNT(DISTINCT)量化区分度,结合数据分布确定顺序;首列必须被所有高频查询覆盖,确保最左前缀可用性。错误顺序会导致索引失效、全表扫描。建索引后务必用EXPLAIN (ANALYZE, BUFFERS)验证扫描行数是否显著减少。避免巨型索引与盲目建索引,2~3列最经济高效。
2026-09-22 09:11:43
297
原创 EXPLAIN 执行计划:PostgreSQL 避免全表扫描与索引优化实战
本文详解PostgreSQL查询优化核心——通过EXPLAIN ANALYZE查看执行计划,避免大表全表扫描。强调在WHERE、ORDER BY列建索引,使用复合索引消除Sort,并修正列上函数调用导致的索引失效问题。关键提醒:EXPLAIN ANALYZE会真实执行DML,必须用BEGIN; ... ROLLBACK;包裹以保障线上数据安全。遵循“证据驱动、两手优化、事务保护”原则,实现高效、安全的性能调优。
2026-09-21 09:50:14
245
原创 唯一索引与 NULL 值:PostgreSQL 主键约束与 NULLS NOT DISTINCT
PostgreSQL 唯一索引默认允许多个 NULL 值,因 SQL 标准中 NULL 互不相等。主键约束自动创建唯一 B-tree 索引,唯一约束与唯一索引底层等价。若需“NULL 也唯一”,须使用 PG 15+ 的 NULLS NOT DISTINCT,但需评估数据现状与业务语义。多数场景应采用 NOT NULL UNIQUE 保证唯一性。避免在旧版本使用该语法或冗余建索引。
2026-09-20 08:53:29
309
原创 TABLESPACE 表空间:PostgreSQL 索引与表分离存储的性能优化
PostgreSQL 中通过 TABLESPACE 将索引与表数据分离存储,可实现性能优化:高频索引放 SSD、冷数据存 HDD,提升 IO 效率。但需确保物理介质差异,否则无收益。表空间为集群级对象,备份恢复时需注意 pg_dump 不包含表空间定义,须提前创建或使用 --no-tablespaces。避免在同盘建多表空间、易失设备存放表空间等错误。合理使用可显著优化查询性能,关键口诀:“快盘分离性能佳,备份恢复别忘它”。
2026-09-19 08:51:54
512
原创 CREATE INDEX CONCURRENTLY:线上建索引不阻塞 DML 的代价与坑
摘要(148字): PostgreSQL 大表建索引应必用 CREATE INDEX CONCURRENTLY,避免阻塞 DML。其代价为两次全表扫描、耗时更长及额外资源开销,需在低峰期执行。失败后会残留 INVALID 索引,持续消耗更新性能,必须手动 DROP 后重试。禁止在事务块内使用、同表并发构建或对分区表直接操作。牢记“线上建索引,CONCURRENTLY 不能省;失败留 invalid,DROP 重来才算成”。
2026-09-18 09:02:19
335
原创 字段类型不一致:PostgreSQL 报错与索引失效的第一元凶
PostgreSQL 强类型特性导致字段类型不一致时,会直接报错(如 operator does not exist)或索引失效。核心问题在于表结构与 Java 实体/参数类型未严格对应,如 BIGINT 用 String 绑定、手机号用 Long 存储、时间字段拼接字符串等。此外,索引列上进行 cast、:: 等转换将导致索引无法命中。解决方案:实体字段与数据库类型一一映射,使用正确的 setXxx 方法绑定参数,避免列上类型转换,并通过 EXPLAIN 验证执行计划。牢记口诀:“实体类型对列型,列上转换
2026-09-17 08:44:51
392
原创 复合索引最左前缀原则:PostgreSQL 的 WHERE 为什么必须命中第一列
复合索引需遵循最左前缀原则:查询必须包含第一列,否则无法缩小扫描范围,导致性能退化。PostgreSQL 中,缺首列时索引仍可能被使用,但仅作内部过滤,效率近似全表扫描。建议复合索引列数不超过3个,等值条件前置,范围条件后置,并用 INCLUDE 实现覆盖索引,避免键列膨胀。通过 EXPLAIN ANALYZE 验证 Index Cond 与 Filter 区分,确保索引真实生效。
2026-09-16 11:44:45
203
原创 7. Java 循环结构
1. Java 循环结构概述 2. while 循环 2.1 while 循环结构简介 2.2 while 循环 语法格式 2.3 while...
2022-08-04 17:21:50
174
原创 Redis缓存面临的缓存击穿问题
**缓存击穿问题:**也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
2022-07-26 23:00:37
340
Java的注解包,在使用注解的时候导入的jjar包
2022-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2