MySQL vs. PostgreSQL

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
perbeatus
Piegowaty Guziec
Piegowaty Guziec
Posty: 3
Rejestracja: 17 lip 2006, 07:58
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

MySQL vs. PostgreSQL

Post autor: perbeatus »

Witam mam następujące pytanie.

Mam bazę danych z tabelką zawierającą w jednym z pól nr seryjny postaci: A12130/A340/341
Aplikacja korzystająca z bazy wyszukuje często po owym numerze i to wyszukuje w sposób szczególny.
Mianowicie:

Pytając o frazę '121' baza ma zwrócić każdy numer seryjny zawierający gdziekolwiek tą frazę, czyli zwróci:
A12130/A340/341
A11130/B121/341
A11130/A340/121
A13121/C340/341
itp.

Do tej pory działało to na MySQL i korzystając z zapytania postaci:

Kod: Zaznacz cały

SELECT * FROM tabela WHERE serial LIKE '%121%';
efekty były zadowalające, czyli np. 5000 zapytań wykonanych jeden po drugim dostawaliśmy w ok 0.5s.

Teraz jednak przesiadamy się na PostgreSQL i tu niestety ta sama operacja trwa 15s! Pomijam już wersję ILIKE której przetwarzanie trwa 1.3m!

Podobno można zindeksować taką kolumnę i korzystać z Full Text Search tylko niestety nie mam pojęcia jak się zabrać za skonfigurowanie słowników i praserów tak aby wyniki były takie jakich oczekuję.

Może ktoś pomoże?

P.S.
Próbowałem już modułu pg_trgm ale rezultaty nie są najlepsze.
krzst
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 28 mar 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: MySQL vs. PostgreSQL

Post autor: krzst »

LIKE %121% nie bedzie wyszukiwane pelnotekstowo (z tego co mi wiadomo) w postgres z uzyciem gin lub gist
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: MySQL vs. PostgreSQL

Post autor: Opalo »

Moze sprobuj:

Kod: Zaznacz cały

SELECT * FROM tabela WHERE serial ~ '121';
Chociaz nie jestem pewien czy bedzie to mial wplyw na sprawe.
krzst
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 28 mar 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: MySQL vs. PostgreSQL

Post autor: krzst »

zeby indeksowanie zadzialalo nie moze sie szukany string zaczac od %. szukany string musi sie zaczynac od jakiegoc konkrentego ciagu znakow (np. abc%), w indeksach mozesz nawet zdefiniowac ich dlugosc i chyba do jej wartosci baza bedzie indeksowala kolumny, np. jak dasz dlugosc 5 to w stringu 'abcdefgh' pod indeksem bedzie tylko 'abcde' - choc masterem w tej kwestii nie jestem :)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 19 gości