2012-10-17 8 views
0

나는 60k 레코드가있는 테이블 '옥션'을 가지고 있습니다. 는 표 경매가 열에 인덱스 갖는다 포스트그레스 쿼리 속도 향상

auctions.tsvector_content_tsearch 
107658 | '-75':75 '-83':81 '0.265':49 '0.50':140 '1':62 '1000':61 '1080':38 '16':39 '160':91 '170':86 '1920':36 '1920x1080':65,69 '2':154 '219':129 '23':3,20 '23.0':31 '236v3lsb':6,23 '24':164 '24.75':134 '250':58 '3.190':117 '30':80 '426':127 '5':54 '5.0':99 '56':74 '566':125 '9':40 'black':45 'cal':32 'cd/m2':59 'compatible':158 'czarny':46 'czas':51 'czuwać':139 'częstotliwość':71,77 'd':110,114 'd-sub':109 'dodatkowy':146,152 'dvi':7,24,113 'dvi-d':112 'ekran':30 'energia':131,137 'energy':97 'epeat':100 'ergonomics':104 'full':41 'g':120 'gs':106 'gwarancja':153,161 'hd':42 'hz':76 'informacja':151 'jasność':56 'kabel':147,149 'kensington':156 'kg':116,118 'khz':82 'kolor':43 'kontrast':60 'kąt':83,88 'lcd':2,15,19 'led':4,21 'lina':28 'lock':157 'maksymalny':64 'matryca':34,53,57 'miejsce':165 'miesiąc':163 'mm':50 'monitor':1,14,18,96 'mś':55 'nazwać':12 'norma':93 'obudowa':44 'odchylać':72,78 'ogólny':17 'okres':159 'opis':16 'optymalny':68 'philips':5,11,22 'piksel':66,70 'pionowy':73,85 'plamka':48 'pobór':130,136 'poziom':90 'poziomy':79,90 'producent':10 'przekątna':29 'przeć':133 'reakcja':52 'rodzina':25 'rohs':102 'rozdzielczość':63,67 'rękojmia':160 'serwis':167 'serwisować':166 'silver':101 'specyfikacja':8 'spełniać':94 'star':98 'stopień':87,92 'sub':111 'techniczny':9 'tryb':138 'tryba':138 'tuv':103,105 'typ':13,33 'v':27 'v-line':26 'vga':150 'waga':115 'wbudować':142 'widzenia':84,89 'widzenie':84,89 'widzieć':84,89 'wielkość':47 'wuxga':35 'wymiar':119 'wyposażenie':145 'wyposażyć':145 'x':37,121,123,126,128 'zasilacz':143 'zasilać':148 'zewn':108 'zewnętrzny':168 'złączać':107 'złącze':107 'łat':155 'ś':122 

아래와 같이 tsearch 벡터를 포함하는 벡터 열 가지고

"auctions_tsvector_content_tsearch_idx" gin (tsvector_content_tsearch) 

좀 정합 벡터 질의 검색 4000-5000ms 약 소요 단계; 너무 길다.
속도를 향상시킬 방법이 있습니까?

EXPLAIN SELECT auctions.id FROM auctions WHERE (auctions.tsvector_content_tsearch @@ to_tsquery('polish', 'lcd')); 


      QUERY PLAN       
-------------------------------------------------------------- 
Seq Scan on auctions (cost=0.00..6598.02 rows=7762 width=4) 
    Filter: (tsvector_content_tsearch @@ '''lcd'''::tsquery) 
(2 rows) 

_ 편집 __ 좋아

내가 문제를 찾은 것 같아 : 폴란드어 사전. 표준 postgres 사전을 사용하여 긴 시간 문제를 해결했습니다. 팁을 보내 주셔서 감사합니다.

답변

1

분명히 계획자는 순차적 스캔이 인덱스를 사용하는 것보다 빠를 것이라고 예상했습니다. 다음보십시오 :

  • SET enable_seqscan=off (테스트에 유용하지만 - 생산에 사용하지 마십시오) 통계는

그 행동이 때때로 GIN 인덱스 발생 대상으로 제기

  • 합니다. PostgreSQL 메일 링리스트에서 this thread을 확인하십시오. 이 문제에 대해 PostgreSQL documentation 공무원에게 문의 할 수도 있습니다.

  • +3

    enable_seqscan을 끄면 테스트 중에 유용하지만 유용하지는 않습니다. 더 나은 통계처럼 실제 문제를 해결하십시오. –

    +0

    전적으로 동의합니다. enable_seqscan을 해제하는 목적은 옵션이 아닌 프로덕션 환경에서 인덱스를 사용하여 실행 계획 및 쿼리 속도 향상을 확인하는 것입니다. –