我觉得我可能已经把自己投入了一个角落,但是我已经有2.7亿行了,宁可不要重新开始。 :)
我有一个表,位置,有以下相关列:
我试图找出一种方法来使用相当于内部联接的ANSI SQL有效地进行查询,但是我很难过。这就是我需要找到的东西:
我对event_id的所有不同值感兴趣,其中一组位置(由event_id相关)包含一组单词(由word_id相关)。
我是否已将自己置于角落?我觉得我需要另一个将单词直接与事件联系起来的联接表,以便有效地完成这项工作。
职位架构:
Table "public.positions" Column | Type | Modifiers ------------+-----------------------------+-------------------------------------------------------- id | integer | not null default nextval('positions_id_seq'::regclass) word_id | integer | position | integer | event_id | integer | created_at | timestamp without time zone | updated_at | timestamp without time zone | Indexes: "positions_pkey" PRIMARY KEY, btree (id) "idx_words" btree (word_id) "index_positions_on_event_id" btree (event_id) "index_positions_on_word_id" btree (word_id)
答案 0 :(得分:1)
我通过创建另一个连接表events_words来解决问题,这些连接表用于跟踪哪些字出现在哪些事件中。这允许更有效的内部连接,但在我看来,内部连接往往超级凌乱:
select distinct a.event_id from events_words as a inner join events_words as b on a.event_id=b.event_id and b.word_id=1 inner join events_words as c on a.event_id=c.event_id and c.word_id=15;
超级工作和查询时间从45秒+下降到< 1秒。