我想优化一个大约有500条SQL行的大型SQL查询,速度有点慢,在交互式系统中执行需要1到5秒。
我看到了这个munin图
这与此图表不同
我从第一个图表(显示扫描)中理解的是,索引在where
或order by
个句子中使用,仅用于搜索与某些规则匹配的元组(布尔表达式)。 / p>
第二张图我不太确定“元组访问”是什么意思
问题1:“元组访问”是什么意思?
所以我认为如果我可以使用索引来重写这个大查询的某些部分以使用索引获取更多元组,并使用第二个图中的信息,那么我可以向前推进优化步骤。
问题2:我说错了吗?第二个图表显示更多的索引读取和更少顺序读取会不会更好?问题3:如果这是正确的,你能提供一个SQL示例,其中元组被索引获取而不是顺序读取它们吗?
注意:在问题中,我只是指第二个图
答案 0 :(得分:2)
通常,尝试优化这样的图形是一个错误,除非您遇到特定的性能问题。事实上从索引中检索元组实际上并不总是更好。这些事情是非常复杂的决定,取决于表格,表格访问,您要检索的材料种类等细节。
事实上,适用于一个数据量的查询计划可能不适用于另一个数据。
特别是如果你有很多小表,顺序扫描将总是打败索引扫描。
所以你要做的是首先找到慢查询,在EXPLAIN ANALYZE
下运行它们并寻找添加适当索引的机会。如果不查看查询计划和实际查询,就无法做到这一点,这就是为什么你总是想看看它。
换句话说,您的图表只是让您了解访问模式。它没有为您提供足够的信息来进行任何真正的性能优化。