Слабое сканирование индекса в postgresql - выбрать дополнительные столбцы? - PullRequest
0 голосов
/ 01 февраля 2019

В postgresql нет свободного сканирования индексов, но на этой странице переполнения стека описан хороший способ развернуть свое собственное использование рекурсивного сканирования CTE.Мой вопрос: как я могу выбрать дополнительные столбцы (которые не используются в предложении distinct)?

Это код, который я в данный момент выполняю: SELECT distinct on (HLH_EVNT_SK, DX_CD) HLH_EVNT_SK, DX_CD, DX_VRSN_ID, DX_TP_CD from med_clm_dx_final; Это работает, но очень медленно.

(HLH_EVNT_SK, DX_CD) определяет индекс в таблице med_clm_dx_final;

Чтобы ускорить его, я могу реализовать рекурсивный CTE как таковой

WITH RECURSIVE
     t AS (
  select HLH_EVNT_SK, DX_CD from (select HLH_EVNT_SK, DX_CD from med_clm_dx_final order by HLH_EVNT_SK, DX_CD limit 1) asdf union all 
  select (select HLH_EVNT_SK from med_clm_dx_final where (HLH_EVNT_SK, DX_CD) > (t.HLH_EVNT_SK,t.DX_CD) order by HLH_EVNT_SK, DX_CD limit 1),
         (select DX_CD from med_clm_dx_final where (HLH_EVNT_SK, DX_CD) > (t.HLH_EVNT_SK,t.DX_CD) order by HLH_EVNT_SK, DX_CD limit 1) 
     from t where t.HLH_EVNT_SK is not null)  
select * from t where t.HLH_EVNT_SK is not null

, но я могу 't выяснить, как также выбрать дополнительные столбцы, не включенные в выборку, а именно DX_VRSN_ID и DX_TP_CD.Спасибо!

...