Performance 如何查找不使用索引的postgresql查询

Performance 如何查找不使用索引的postgresql查询,performance,postgresql,database-performance,Performance,Postgresql,Database Performance,我们有一个生产缓慢的postgresql数据库。在开发过程中,它很快,因为数据库中的数据少得多 我想得到一个查询日志,尽管在开发过程中查询速度很快,但在生产过程中可能会很慢 如何查找不使用索引而是进行表扫描的sql查询? 顺便问一下,这样做有意义吗? 设置代码> AutoMyTrace.LogyMin持续时间< /代码>到您认为是“慢”的毫秒数。 运行grep“Seq Scan”,无论您的日志目录是什么(可以使用显示日志目录) 设置代码> AutoMyTrace.LogyMin持续时间< /代

我们有一个生产缓慢的postgresql数据库。在开发过程中,它很快,因为数据库中的数据少得多

我想得到一个查询日志,尽管在开发过程中查询速度很快,但在生产过程中可能会很慢

如何查找不使用索引而是进行表扫描的sql查询?

顺便问一下,这样做有意义吗?

设置代码> AutoMyTrace.LogyMin持续时间< /代码>到您认为是“慢”的毫秒数。
  • 运行grep“Seq Scan”,无论您的日志目录是什么(可以使用
    显示日志目录
  • 设置代码> AutoMyTrace.LogyMin持续时间< /代码>到您认为是“慢”的毫秒数。
  • 运行grep“Seq Scan”,无论您的日志目录是什么(可以使用
    显示日志目录

  • 是的,这是有道理的。您必须对应用程序中找到的每个查询执行解释计划。将WHERE子句与它们访问的表上的索引进行比较。谁设计了数据库模型,是应用程序程序员?您可以说“在生产过程中可能会很慢的查询”、“不使用索引而是进行表扫描的查询”和“在开发过程中,它很快,因为数据库中的数据要少得多”。请注意,计划员将根据数据量(以及更多,如基数)切换计划,因此您无法从开发中使用的计划(使用小数据集)推断生产中使用的计划(使用大数据集)。您最好在开发中复制(或模拟)生产数据集,否则您将不得不在生产中检查计划。此外,并非所有的序列扫描都是错误的。在一个小表(例如一个状态列表)上进行seq扫描是完全正常的,并且通常是比索引扫描更好的解决方案。是的,这是有意义的。您必须对应用程序中找到的每个查询执行解释计划。将WHERE子句与它们访问的表上的索引进行比较。谁设计了数据库模型,是应用程序程序员?您可以说“在生产过程中可能会很慢的查询”、“不使用索引而是进行表扫描的查询”和“在开发过程中,它很快,因为数据库中的数据要少得多”。请注意,计划员将根据数据量(以及更多,如基数)切换计划,因此您无法从开发中使用的计划(使用小数据集)推断生产中使用的计划(使用大数据集)。您最好在开发中复制(或模拟)生产数据集,否则您将不得不在生产中检查计划。此外,并非所有的序列扫描都是错误的。在一个小表(例如一个状态列表)上进行seq扫描是完全正常的,并且通常是比索引扫描更好的解决方案。