PostgreSQL 慢查询定位:用 EXPLAIN ANALYZE 揪出索引失效,耗时从 2.1s 降到 12msPostgreSQL

发布时间:2026/10/26 18:45:06

PostgreSQL 慢查询定位:用 EXPLAIN ANALYZE 揪出索引失效,耗时从 2.1s 降到 12msPostgreSQL TL;DR一条本应走索引的查询跑了 2.1 秒排查后发现是函数包裹索引列导致索引失效。用EXPLAIN ANALYZE定位后改写查询条件耗时降到 12ms提升 175 倍。现象查询突然变慢某天业务反馈订单列表页加载要 2 秒多。查看慢查询日志发现一条高频 SQLSELECT * FROM orders WHERE date(created_at) 2025-03-01 ORDER BY id DESC LIMIT 20;orders 表有 500 万行created_at上有普通 B-tree 索引。之前一直正常最近数据量涨了开始变慢。定位EXPLAIN ANALYZE 揭真相直接跑EXPLAIN ANALYZE看执行计划EXPLAIN ANALYZE SELECT * FROM orders WHERE date(created_at) 2025-03-01 ORDER BY id DESC LIMIT 20;关键输出Seq Scan on orders (cost0.00..102432.80 rows523 width96) (actual time0.045..2108.234 rows523 loops1) Filter: (date(created_at) 2025-03-01::date) Rows Removed by Filter: 4999477 Planning Time: 0.123 ms Execution Time: 2108.456 ms看到Seq Scan全表扫描说明索引没被用上。原因就是date(created_at)这个函数包裹了索引列导致索引失效。修复改写查询让索引生效把函数放到条件右边用范围查询代替函数调用SELECT * FROM orders WHERE created_at 2025-03-01::date AND created_at 2025-03-02::date ORDER BY id DESC LIMIT 20;再次EXPLAIN ANALYZE结果Limit (cost0.43..2.65 rows20 width96) (actual time0.012..0.187 rows20 loops1) - Index Scan Backward using orders_created_at_idx on orders (cost0.43..57730.72 rows523 width96) (actual time0.011..0.184 rows20 loops1) Index Cond: ((created_at 2025-03-01::date) AND (created_at 2025-03-02::date)) Execution Time: 0.201 ms实际执行时间从 2108ms 降到 0.2ms如果算上网络开销业务侧感知从 2.1s 降到 12ms因为原来还有数据传输时间。复盘为什么函数会让索引失效B-tree 索引存储的是列原始值的排序结构当你对列做函数运算时数据库无法直接利用索引中的排序只能对每一行计算函数值再过滤这就是全表扫描的根源。常见坑还有WHERE upper(name) ABC、WHERE id 1 100等。解决方案要么改写查询如上要么建表达式索引如CREATE INDEX ON orders (date(created_at))但后者增加写开销不如前者干净。照做路径发现慢查询先看执行计划EXPLAIN ANALYZE your_sql。如果看到Seq Scan且过滤条件里有函数优先改写 SQL。把函数移到条件右侧用范围查询或等值查询替代。无法改写时再考虑表达式索引。下一步去你的慢查询日志里搜一下有没有类似WHERE func(col) ...的语句用今天的方法改掉预计能提速百倍。
延伸阅读

更多相关文章

2026/10/26 18:45:06

鸢尾花分类项目实战:从数据探索到模型部署

1. 项目概述 鸢尾花数据集(Iris Dataset)是机器学习领域最经典的入门项目之一,由统计学家R.A. Fisher在1936年首次引入。这个数据集包含了150个样本,每个样本有4个特征(萼片长度、萼片宽度、花瓣长度、花瓣宽度&#x…

2026/10/26 18:45:06

提升团队数据素养的5个黄金实践方法

1. 为什么数据素养是团队必备能力 在数字化浪潮席卷各行各业的今天,数据已经取代石油成为新时代的核心生产要素。但现实情况是,大多数团队成员面对数据报表时的反应依然是"这是什么?""这有什么用?""我该…

2026/10/26 18:45:06

3D视觉技术如何提升商业客流统计准确率

1. 项目背景与核心价值 商业地产和零售行业长期面临一个棘手难题:如何准确统计真实客流量?传统客流统计系统存在明显缺陷——当顾客在监控盲区短暂停留、多人并行通过闸机、或出现异常移动轨迹时,系统记录会产生严重偏差。某购物中心曾出现系…

2026/10/26 19:50:47

Java图书馆系统:MVC+Swing+MySQL课设实战指南

简介:本资源是一份面向Java初学者与课程设计实践者的完整图书馆书库管理系统开发资料,聚焦于MVC架构下的Web应用开发全流程,解决图书录入、借阅管理、用户权限控制及数据统计等核心业务问题。压缩包共80个文件,含16个核心Java源码…

2026/10/26 19:50:47

大模型三大落地能力:可控生成、跨模态协同与实时响应

1. 标题背后的现实语境:为什么“GPT-6 Luna”并不存在,但这个标题值得深挖你点开这个标题时,大概率是被“GPT-6”和“Luna”两个词同时击中了——前者暗示着超越当前主流大模型的代际跃迁,后者带着航天级的科技感与命名仪式感。但…

2026/10/26 19:50:47

解决Windows安卓模拟器aehd.sys驱动安装错误127

1. 问题现象与背景解析 当你在Windows系统上运行安卓虚拟机(如BlueStacks、NoxPlayer等)时,可能会遇到一个典型的驱动安装错误:"aehd无法安装:[SC] StartService 失败 127:找不到指定的程序"。这个报错通常发…

2026/10/26 19:50:47

Docker部署guacd与Guacamole无客户端远程桌面实践

远程办公和混合办公铺开之后,经常有人问我同一个问题:内网那几台机器的桌面,怎么让外面的人用浏览器直接打开,还不用在每台电脑上装客户端。我的答案通常只有一个——用 Docker 把 guacd 跑起来,前面挂一层 Guacamole 的 Web 端。guacd 是整个无客户端远程桌面方案里的"协…

2026/10/26 19:50:47

麒麟服务器操作系统 dhcpd 配置与多网段运维实战

1. 先把话说清楚:这台DHCP服务器到底要顶什么用自建DHCP这事,很多人第一反应是“交换机上开一个不就完了”。真到机房落地的时候,你很快会发现三层交换机那点DHCP功能不够用:地址池没法按终端类型分组、静态绑定改一次要进设备命令…

2026/10/26 19:45:44

SpaTime:面向动态场景理解的时空联合建模框架

1. 项目概述:这不是又一个“多模态大模型”,而是一次对“时间空间”理解能力的硬核重构SpaTime 这个名字乍看像某家水疗中心的英文名,但拆开来看——Spa代表Spatial(空间),Time代表Temporal(时间…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑