博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 11 章 索引_11.12. 检查索引使用
阅读量:7079 次
发布时间:2019-06-28

本文共 1143 字,大约阅读时间需要 3 分钟。

11.12. 检查索引使用

尽管PostgreSQL中的索引并不需要维护或调优,但是检查真实的查询负载实际使用了哪些索引仍然非常重要。检查一个独立查询的索引使用情况可以使用命令,它应用于这种目的的内容在中有介绍。也可以在一个运行中的服务器上收集有关索引使用的总体统计情况,如所述。

很难明确地表达决定创建哪些索引的通用过程。在之前的小节中的例子里有一些典型的情况。通常需要大量的实验才能决定应该创建哪些索引。本小节剩余的部分将给出一些创建索引的提示:

  • 总是先运行。这个命令会收集有关表中值分布情况的统计信息。估计一个查询将要返回的行数需要这些信息,而结果行数则被规划器用来为每一个可能的查询计划分配实际的代价。如果没有任何真实的统计信息,将会假定一些默认值,这几乎肯定是不准确的。在没有运行的情况下检查一个应用的索引使用情况是注定要失败的。详见和。

  • 使用真实数据进行实验。使用测试数据来建立索引将会告诉你测试数据需要什么样的索引,但这并不代表真实数据的需要。

    使用非常小的测试数据集是特别致命的。在从100000行中选出1000行时可能会用到索引,但是从100行里选出1行是很难用到索引的,因为100行完全可能放入到一个磁盘页面中,而没有任何计划能够比得上从一个磁盘页面顺序获取的计划。

    在创建测试数据时也要小心,特别是当应用还没有产生时通常是不可避免的。值非常相似、完全随机或以排好序的方式被插入都将是的统计信息倾斜于真实数据中的值分布。

  • 如果索引没有被用到,强制使用它们将会对测试非常有用。有一些运行时参数可以关闭多种计划类型(参见)。例如,关闭顺序扫描(enable_seqscan)以及嵌套循环连接(enable_nestloop)将强制系统使用一种不同的计划。如果系统仍然选择使用一个顺序扫描或嵌套循环连接,则索引没有被使用的原因可能更加根本,例如查询条件不匹配索引(哪种查询能够使用哪种索引已经在前面的小节中解释过了)。

  • 如果强制索引使用确实使用了索引,则有两种可能性:系统是正确的并且索引确实不合适,或者查询计划的代价估计并没有反映真实情况。因此你应该对用索引的查询和不用索引的查询计时。此时EXPLAIN ANALYZE命令就能发挥作用了。

  • 如果发现代价估计是错误的,也分为两种可能性。总代价是用每个计划节点的每行代价乘以计划节点的选择度估计来计算的。计划节点的代价估计可以通过运行时参数调整(如所述)。不准确的选择度估计可能是由于缺乏统计信息,可以通过调节统计信息收集参数(见)来改进。

    如果你不能成功地把代价调整得更合适,那么你可能必须依靠显式地强制索引使用。你也可能希望联系PostgreSQL开发者来检查该问题。

本文转自PostgreSQL中文社区,原文链接:

转载地址:http://ktvml.baihongyu.com/

你可能感兴趣的文章
《ANSYS Workbench有限元分析实例详解(静力学)》——2.4 ACT插件
查看>>
《Python语言程序设计》——2.12 实例研究:显示当前时间
查看>>
码云推荐 | WEB 网页端在线流程设计器
查看>>
《编译与反编译技术实战》——第3章词法分析器的设计与实现
查看>>
《数据分析实战:基于EXCEL和SPSS系列工具的实践》一3.4.2 用专业工具处理
查看>>
MySQL运维之神奇的参数(终结篇)
查看>>
《Photoshop图层调整深度剖析》目录—导读
查看>>
《Wireshark网络分析就这么简单》—Excel文件的保存过程
查看>>
《高度安全环境下的高级渗透测试》—第1章1.4节探索BackTrack
查看>>
《Origin 9.0科技绘图与数据分析超级学习手册》一2.5 本章小结
查看>>
深度解析 API 监控那些事儿
查看>>
互联网企业安全高级指南3.7.3 因地制宜的SDL实践
查看>>
centos7.0体验与之前版本的不同
查看>>
《Docker生产环境实践指南》——1.2 从开发环境到生产环境
查看>>
Java NIO系列教程(五) 通道之间的数据传输
查看>>
open-falcon安装使用监控树莓派
查看>>
【基础篇】零碎时间整理JS
查看>>
理解 Android Battery 信息
查看>>
js红宝书总结-正则表达式
查看>>
Python2.7爬取acg178全站(大雾)
查看>>