当前位置: 首页 > news >正文

postgresql查询数据sql无法使用到索引

249cf4d51b55cb050be917de54c3dbaa

842c74907243ca12791fba1c73d24070

   
  如图,刚做过数据迁移将postgresql14中的数据及表迁移到了kingbase数据库中,但发现查询数据在一定范围内内匹配到索引,超过之后就是全表扫描

  解决方法:VACUUM ANALYZE sc_surface_water_hour
  

在 PostgreSQL 中,VACUUM ANALYZE sc_surface_water_hour; 是一个组合命令,主要作用和对索引选择的影响如下:

一、命令的核心作用

该命令由 VACUUM 和 ANALYZE 两个操作组成,同时完成数据清理和统计信息更新:
 
  1. VACUUM 的作用
     
    当表中的数据被删除(DELETE)或更新(UPDATE)时,PostgreSQL 不会立即物理删除旧数据,而是将其标记为 “死元组”(dead tuples)。这些死元组会占用磁盘空间,且在扫描表时会被无意义地读取,降低查询效率。
     
    VACUUM 的作用是:
    • 回收死元组占用的磁盘空间,使其可被新数据复用;
    • 更新表的可见性映射(visibility map),帮助查询跳过无需扫描的 “全死” 数据块,提升扫描效率。
  2. ANALYZE 的作用
     
    PostgreSQL 的查询规划器(Query Planner)在生成执行计划时,需要依赖表的统计信息来判断最优路径(例如 “用索引扫描还是全表扫描”)。
     
    ANALYZE 的作用是:
    • 收集表的关键统计数据,包括:表的总行数、各字段的非空值数量、唯一值分布、数据块数量、字段值的频率分布等;
    • 将这些统计信息存储在系统表(如 pg_statistic)中,供查询规划器使用。

二、为什么会影响索引的选择?

查询规划器选择是否使用索引,核心依据是 ANALYZE 收集的统计信息。具体来说:
 
  1. 统计信息决定 “成本评估”
     
    规划器会基于统计信息计算不同执行路径的 “成本”(如 I/O 成本、CPU 成本)。例如:
    • 如果统计信息显示某字段的查询条件(如 WHERE status = 'error')只能过滤出极少数行(比如 1%),规划器会认为 “索引扫描” 更高效(先查索引定位行,再回表取数据);
    • 如果统计信息显示过滤后的数据量很大(比如 30% 以上),规划器可能认为 “全表扫描” 更高效(避免索引扫描的回表开销)。
  2. 过时统计信息会导致错误选择
     
    当表经过大量插入、更新、删除后,旧的统计信息会与实际数据分布脱节。例如:
    • 实际表中已新增 100 万行,但统计信息仍记录为 10 万行,规划器可能误判 “索引扫描成本更低”,但实际执行时因数据量过大导致效率下降;
    • 某字段原本重复值很少(适合索引),但经过大量更新后重复值占比极高(不适合索引),但统计信息未更新,规划器仍会错误选择索引。
  3. VACUUM 间接辅助统计准确性
     
    VACUUM 清理死元组后,表的实际数据量(活元组数量)会更准确,ANALYZE 基于清理后的数据收集统计信息,能进一步提升规划器对 “数据规模” 的判断准确性,间接影响索引选择。

总结

VACUUM ANALYZE 本质是通过清理无效数据和更新统计信息,让查询规划器能基于表的真实状态评估执行成本,从而更合理地选择是否使用索引(或选择哪个索引),最终优化查询性能。

 

http://www.gsyq.cn/news/29260.html

相关文章:

  • 自动机
  • 标注工具--抹除目标
  • 【数据挖掘】基于随机森林回归模型的二手车价格预测分析(信息集+源码)
  • Z函数(扩展 KMP)
  • 常用例题
  • 实验报告3
  • 2025年环评公司权威推荐排行榜,环评手续,环评报告,环评验收,专业高效服务助力企业合规发展
  • Seata用法
  • Day3多媒体标签——视频与音频
  • 提交一张 PPT,参与 RTE2025 全球语音智能体云展示
  • 完整教程:深入解析AppCrawler:开源自动遍历测试工具配置指南
  • 解释 EIP-4337
  • 材料包含与下载漏洞
  • 完整教程:Elasticsearch面试精讲 Day 23:安全认证与权限控制
  • 求解连续数字的正约数集合——倍数法
  • 欧拉筛(线性筛)
  • 常见数列
  • Markdown数学公式 - -一叶知秋
  • 最小割
  • 查询GPIO状态值(步骤)
  • 欧拉路径/欧拉回路 Hierholzers
  • 无源汇点的最小割问题 Stoer–Wagner
  • 染色法判定二分图 (dfs算法)
  • 链式前向星建图与搜索
  • 一般图最大匹配
  • CF2152G
  • 平面图最短路(对偶图)
  • 最小生成树(MST问题)
  • 10.23总结
  • 关于 vue项目 代理的坑;baseURL必须为空;代理才会生效