0

我知道这是一个尴尬的问题..但我不明白什么EXPLAIN解释..

我的查询是User.last,花了超过 0.5 秒这可能是最简单的查询,但似乎解释解释它有困难..

我不明白什么是QUERY PLAN 宽度之后的任何内容?什么是成本?它如何解释查询在哪里花费了更多时间?

[40] pry(main)> User.last
  User Load (671.0ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1
  EXPLAIN (39.0ms)  EXPLAIN SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1
EXPLAIN for: SELECT  "users".* FROM "users"  ORDER BY "users"."id" DESC LIMIT 1
                             QUERY PLAN
--------------------------------------------------------------------
 Limit  (cost=1.08..1.08 rows=1 width=2861)
   ->  Sort  (cost=1.08..1.09 rows=5 width=2861)
         Sort Key: id
         ->  Seq Scan on users  (cost=0.00..1.05 rows=5 width=2861)
(4 rows)
4

1 回答 1

3

查询计划显示查询每个部分的性能成本。

例如:

  • cost=0.00 - 估计的启动成本(输出扫描开始之前花费的时间,例如,在排序节点中进行排序的时间。)
  • ..1.05 - 估计总成本(如果要检索所有行,它们可能不是:例如,带有 LIMIT 子句的查询将停止支付限制计划节点的输入节点的总成本。)
  • rows=5 - 此计划节点输出的估计行数(同样,仅当执行完成时。)
  • width=2861 - 此计划节点输出的行的估计平均宽度(以字节为单位)

这里

有关更多信息,请查看这个那个链接。

于 2013-01-13T11:24:13.130 回答