Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 优化查询以直接从索引中提取元组_Sql_Postgresql_Optimization_Query Optimization - Fatal编程技术网

Sql 优化查询以直接从索引中提取元组

Sql 优化查询以直接从索引中提取元组,sql,postgresql,optimization,query-optimization,Sql,Postgresql,Optimization,Query Optimization,我想优化一个大型SQL查询,它有大约500行SQL语句,速度有点慢,在交互式系统中执行需要1到5秒 我看到了这张穆宁图 这和这张图不一样 我从第一个图(显示扫描)中了解到,索引在where或order by语句中使用,只是用于搜索与某些规则(布尔表达式)匹配的元组 第二个图我不确定“元组访问”是什么意思 问题1:“元组访问”的含义是什么 所以我想,如果我可以重写这个大查询的某些部分,使用索引获取更多元组,使用第二个图中的信息获取更少的顺序,那么我可以向前迈出优化的一步 问题2:我说得对吗?第

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

我看到了这张穆宁图

这和这张图不一样

我从第一个图(显示扫描)中了解到,索引在
where
order by
语句中使用,只是用于搜索与某些规则(布尔表达式)匹配的元组

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

问题1:“元组访问”的含义是什么

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

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

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


注意:在问题中,我只是指第二个图表,一般来说,试图优化这样的图表是错误的,除非您有特定的性能问题。事实上,从索引中检索元组并不总是更好。这些都是非常复杂的决策,取决于表的具体情况、表的访问、您要检索的材料的种类等等

事实上,适用于一个数据量的查询计划可能不适用于另一个数据量

特别是如果有很多小表,例如,顺序扫描总是优于索引扫描

因此,您要做的是首先查找慢速查询,在
EXPLAIN ANALYZE
下运行它们,并寻找添加适当索引的机会。如果不查看查询计划和实际查询,就无法执行此操作,这就是为什么您总是希望查看它


换句话说,您的图形只是给您一种访问模式的感觉。它没有为您提供足够的信息来进行任何类型的真正性能优化。

如果您想谈论优化,您应该显示实际的查询、数据结构、索引以及SQL的确切版本。500行太多了。这是PostgreSQL的确切版本。谢谢,这对我有帮助!此外,查询中有三个表,一个是自交叉连接的大表,两个较小的表。