使用索引建议进行解释

使用索引建议进行解释

是否有任何(最好是开源的)软件可以分析 PostgreSQL EXPLAIN,并推荐可以加快查询速度的必要索引?

答案1

我几分钟前才发现这个:http://explain.depesz.com/。您粘贴 EXPLAIN ANALYZE 的结果,它会显示可能存在问题的地方(甚至是彩色编码的)。

从帮助部分...

explain.depesz.com 是查找查询缓慢的真正原因的工具。通常,人们会使用 EXPLAIN ANALYZE query; 并读取输出。问题是,输出的所有部分并非所有人都能轻易理解,而且执行时间为 17.3ms 的节点是否比运行时间为 100ms 的节点更快或更慢并不总是很明显 - 考虑到第一个节点执行了 7 次。要使用该网站,只需转到其首页并粘贴 psql 的 explain analyze 输出。此输出可能看起来像这样。上传后,您将被定向到显示解析的页面,并且很好地(至少对我来说很好 :) 着色以强调重要部分。这可能看起来像这样。旁注:彩色输出的 URL 是持久的,因此您可以简单地使用它来向其他人展示 - 例如 - 向 freenode 上的 irc 频道 #postgresql 上的那些好人展示。该图使用 4 种颜色来标记重要的事情:白色背景 - 一切正常黄色背景 - 给定节点令人担忧棕色背景 - 给定节点更令人担忧红色背景 - 给定节点非常令人担忧使用哪种颜色,取决于您将使用哪种模式:“独占”、“包含”或“行 X”。

答案2

我不知道 Postgres 有任何工具可以通过算法实现这一点,在我看来,人脑(以及在开发环境中进行的一点实验)才是真正适合这里的唯一工具。这涉及很多因素,包括查询规划器是否认为您的索引值得使用——这取决于您的安装调整查询规划器设置的方式以及所涉及表的大小/统计信息。

我能给出的最佳建议是做一个EXPLAIN ANALYZE(这ANALYZE很重要——它会给你查询和子计划的运行时间),自己看看结果并攻击你首先看到的最大数字。你可能可以编写一个解析器来分解 EXPLAIN 输出(特别是在 9.0 中使用 JSON 输出),但我不知道有谁已经解决了这个问题(这基本上是 MS-SQL 优化器所做的……)

答案3

没有任何生产级的东西,但对于好奇的人来说,有一个研究项目可以实现类似的东西。搜索“PostgreSQL 索引顾问”。

答案4

该工具(免费,但不开源)可以分析模式+查询并建议合适的索引:https://pganalyze.com/index-advisor

相关内容