首页 > 数据库 > mysql教程 > 为什么我的 PostgreSQL `SELECT DISTINCT` 这么慢,我该如何修复它?

为什么我的 PostgreSQL `SELECT DISTINCT` 这么慢,我该如何修复它?

Linda Hamilton
发布: 2025-01-07 18:39:40
原创
953 人浏览过

Why is My PostgreSQL `SELECT DISTINCT` So Slow, and How Can I Fix It?

PostgreSQL SELECT DISTINCT 性能瓶颈:案例研究

本文研究了在包含大约 200 万条记录的 PostgreSQL 表上执行 SELECT DISTINCT 查询时遇到的性能问题。

上下文

tickers 表存储来自 Coinbase Pro 的“股票行情”通道的数据。 复合主键包含 product_id 列。

性能问题

由于 SELECT DISTINCT product_id FROM tickers 上的索引,查询 product_id 预计会表现良好。 然而,执行始终需要 500-600 毫秒。

查询计划调查

EXPLAIN ANALYZE 显示查询规划器默认为顺序扫描,忽略 product_id 索引。 强制使用索引并没有解决性能问题。

索引优化尝试

product_id 上创建专用索引仅产生了微小的改进,除非明确覆盖,否则计划者仍然首选顺序扫描。

有效的解决方案:索引跳过扫描模拟

实现的解决方案使用带有横向连接的递归查询来模拟索引跳过扫描。这种方法显着提高了性能,即使对于 225 万行的数据集,执行时间也缩短至 0.75 毫秒。

总结

PostgreSQL 当前缺乏本机索引跳过扫描功能的问题可以通过这种模拟技术解决。 该方法有效地利用了现有索引,并避免了大型表上SELECT DISTINCT查询的顺序扫描的性能损失。

以上是为什么我的 PostgreSQL `SELECT DISTINCT` 这么慢,我该如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板