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
Postgresql 理解解释分析查询计划_Postgresql_Sql Execution Plan - Fatal编程技术网

Postgresql 理解解释分析查询计划

Postgresql 理解解释分析查询计划,postgresql,sql-execution-plan,Postgresql,Sql Execution Plan,我有以下输出 Merge Join (cost=31843.55..32194.92 rows=30215 width=36) (actual time=496.720..510.071 rows=38381 loops=1) Merge Cond: (movies.year = people.birth_year) -> Sort (cost=9905.45..9918.62 rows=5268 width=22) (actual time=151

我有以下输出

Merge Join (cost=31843.55..32194.92 rows=30215 width=36)
           (actual time=496.720..510.071 rows=38381 loops=1)
  Merge Cond: (movies.year = people.birth_year)
  -> Sort (cost=9905.45..9918.62 rows=5268 width=22)
     (actual time=151.781..152.690 rows=5634 loops=1) // <---- !!!! LOOKING HERE !!!!
       Sort Key: movies.year
       Sort Method: quicksort Memory: 729kB
     -> Seq Scan on movies (cost=0.00..9579.81 rows=5268 width=22)
        (actual time=145.826..149.340 rows=7640 loops=1) // <---- !!!! LOOKING HERE !!!!
          Filter: (title > ’y’::text)
          Rows Removed by Filter: 456425 // <---- !!!! LOOKING HERE !!!!
  -> Sort (cost=21936.87..21953.89 rows=6808 width=18)
     (actual time=344.918..347.980 rows=38465 loops=1)
       Sort Key: people.birth_year
       Sort Method: quicksort Memory: 423kB
     -> Seq Scan on people (cost=0.00..21503.44 rows=6808 width=18)
        (actual time=341.883..343.847 rows=4151 loops=1)
          Filter: (name > ’zeke’::text)
          Rows Removed by Filter: 1099324
Planning time: 0.450 ms
Execution time: 511.988 ms
合并联接(成本=31843.55..32194.92行=30215宽度=36) (实际时间=496.720..510.071行=38381循环=1) 合并条件:(movies.year=people.birth\u year) ->排序(成本=9905.45..9918.62行=5268宽度=22) (实际时间=151.781..152.690行=5634循环=1)//电影上的顺序扫描(成本=0.00..9579.81行=5268宽度=22) (实际时间=145.826..149.340行=7640循环=1)/“y”::文本) 被筛选器删除的行:456425//排序(成本=21936.87..21953.89行=6808宽度=18) (实际时间=344.918..347.980行=38465循环=1) 排序键:people.birth\u year 排序方法:快速排序内存:423kB ->按顺序扫描人员(成本=0.00..21503.44行=6808宽=18) (实际时间=341.883..343.847行=4151循环=1) 过滤器:(名称>'zeke'::文本) 被筛选器删除的行:1099324 计划时间:0.450毫秒 执行时间:511.988毫秒 我想知道
title>“y”的选择性估计值
此计划显示由筛选器删除的行:456425

我们拥有的总行数为
464065

由于过滤器删除了
456425
行,因此我们选择
464065-456425=7640
行,该行在
Seq Scan
行中提到

但是为什么最上面的
排序
会将实际行数显示为
5634
?它是从哪里来的

我认为这可能与第二个排序操作有关,但它们是完全不同的分支


有没有办法知道表是否适合内存?Plan指示正在使用的内存量,但我看不到它们指示是否所有这些都适合内存。

我不确定,但我猜测“合并联接”只消耗了“排序”节点中的5634行

PostgreSQL执行“按需”工作,即,只要上级节点需要,就会从下级节点请求结果行

虽然“Sort”肯定需要“Seq Scan”中的所有行,但合并连接可以在读取所有可用的排序行之前完成

这不是你的问题,但为了加快查询速度,你需要在
人物(姓名)
电影(标题)
上建立索引


要知道数据是否已缓存,请使用
解释(分析、缓冲)
。然后您会看到在缓存中找到的块数(hit)和从操作系统读取的块数(read)。但是,请注意,“读取”数据可能来自文件系统缓存。

您应该保留执行计划的缩进,因为这对理解它也很重要-缩进显示了不同计划节点的嵌套级别