优化子查询连接顺序

时间:2016-02-25 00:08:07

标签: sql postgresql

我有这个问题 - 但这需要很长时间。 我在维基百科上读到,加入顺序可能是一个因素:

  

查询计划的性能很大程度上取决于表的连接顺序。例如,当分别连接3个大小为10行,10,000行和1,000,000行的表A,B,C时,首先连接B和C的查询计划可以花费几个数量级的时间来执行,而不是一个首先加入A和C

我正试图通过他们的剧集播放一部演员的电视节目。

我的查询如下:

select distinct e.show_id
  from episodes e
  where e.id IN
  (select c.episode_id
  from   contributions c
  where  c.person_id = #{@person.id})
")

每个的列数是:

  1. 2,500,000集
  2. 600,000捐款
  3. 40,000显示
  4. 20,000人
  5. 我是在正确的轨道上还是应该加入?即使所有内容都有索引,此查询有时也会在heroku上花费10秒以上。

1 个答案:

答案 0 :(得分:0)

尝试使用JOIN而不是嵌套的select和IN。这样的事情:

SELECT distinct e.show_id
  FROM episodes e
  JOIN contributions c
    ON e.id = c.episode_id
  WHERE c.person_id = @person.id