Как ускорить выполнение запроса postgres? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть следующие таблицы с таблицей Table1 со строками:> 25 миллионов строк

Table1:

chrom strand ref_base alt_base pos      gene_ensembl_identifier seq_window_9mers  mutated_base seq_window_mut_9mers 
----- ------ -------- -------- -------- ----------------------- ----------------- ------------ -------------------- 
3     1      C        T        40457498 ENSG00000168032         ACGCTCTACACACACAG A            ACGCTCTAAACACACAG    

Table2

seq_window_mut_9mers start substring 
-------------------- ----- --------- 
ACGCTCTAAACACACAG    1     ACGCTCTAA
ACGCTCTAAACACACAG    2     CGCTCTAAA
ACGCTCTAAACACACAG    3     GCTCTAAAC
ACGCTCTAAACACACAG    4     CTCTAAACA
ACGCTCTAAACACACAG    5     TCTAAACAC
ACGCTCTAAACACACAG    6     CTAAACACA
ACGCTCTAAACACACAG    7     TAAACACAC
ACGCTCTAAACACACAG    8     AAACACACA
ACGCTCTAAACACACAG    9     AACACACAG


Я хочу выполнить соединение иметь следующую таблицу в столбце seq_window_mut_9mers.

final_table

chrom strand ref_base alt_base pos      gene_ensembl_identifier   seq_window_mut_9mers  substring
----- ------ -------- -------- -------- ----------------------- ----------------- ------------ -------------------- 
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     ACGCTCTAA
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     CGCTCTAAA
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     GCTCTAAAC
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     CTCTAAACA
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     TCTAAACAC
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     CTAAACACA
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     TAAACACAC
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     AAACACACA
3     1      C        T        40457498 ENSG00000168032           ACGCTCTAAACACACAG     AACACACAG

Я выполняю следующий запрос postgres через dbvisualizer. В данный момент запрос выполняется очень медленно (все еще ожидает вывода ..> 10 минут).

SELECT 
chrom, strand, ref_base, alt_base, pos, gene_ensembl_identifier, mut.seq_window_mut_9mers substring 
FROM table1    
LEFT JOIN table2 ON mer9.seq_window_mut_9mers = table1.seq_window_mut_9mers;

Как я могу заставить его работать быстрее? Любые предложения будут очень полезны.

Спасибо

1 Ответ

3 голосов
/ 10 февраля 2020

Похоже, вам не нужно объединяться с таблицей2. Вы можете создать его на лету с помощью функции подстроки, например:

select
  table1.*,
  offsets.start,
  substring(seq_window_mut_9mers from offsets.start for 9) as substring
from
  table1,
  (select generate_series(1,9) as start) as offsets;

Это будет намного быстрее, чем объединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...