0

我想优化一个大约有 500 条 SQL 行并且速度有点慢的大型 SQL 查询,在交互式系统中执行需要 1 到 5 秒。

我看到了这个 munin 图

图2

这和这张图不一样

图1

我从第一张图(显示扫描)中了解到,索引被用于whereorder by句子中,只是为了搜索与某些规则(布尔表达式)匹配的元组。

第二张图我不太确定“元组访问”是什么意思

问题1:“元组访问”是什么意思?

所以我在想,如果我可以使用第二张图中的信息重写这个大查询的某些部分以使用索引获取更多元组而不是按顺序获取更多元组,那么我可以向前迈出优化一步。

问题2:我说的对吗?第二张图显示更多的索引获取和更少的顺序读取会更好吗?

问题 3:如果这是正确的,您能否提供一个 SQL 示例,其中元组是索引获取的,而不是顺序读取的?

注意:在问题中,我仅指第二张图

4

1 回答 1

2

通常,除非您遇到特定的性能问题,否则尝试像这样优化图表是错误的。事实上,从索引中检索元组并不总是更好。这些事情是非常复杂的决定,取决于表的细节、表的访问权限、您要检索的材料种类等等。

事实是,适用于一种数据量的查询计划可能不适用于另一种数据量。

特别是如果您有很多小表,例如,顺序扫描总是会击败索引扫描。

因此,您要做的是从查找慢查询开始,在其下运​​行它们EXPLAIN ANALYZE并寻找添加适当索引的机会。如果不查看查询计划和实际查询,您就无法做到这一点,这就是为什么您总是想查看它的原因。

换句话说,您的图表只是让您了解访问模式。它没有为您提供足够的信息来进行任何类型的实际性能优化。

于 2013-11-01T05:17:20.200 回答