[SQL] Wyszukiwanie, predkosc
Waldemar - 13-11-2006 00:45
[SQL] Wyszukiwanie, predkosc
Witam,
Musze zrobic wyszukiwanie po dosc sporej tabeli obiektow. Kazdy obiekt ma nazwe (czasem przydluga, tak do 40 slow) oraz slowa kluczowe.
Wyszukiwanie bedzie polegalo na tym, ze user wpisuje fraze ktorej slowa beda poszukiwane zarowono wsrod nazwy jak i slow kluczowych.
Wymyslilem sobie, ze zrobie to (w duzym uproszczeniu) tak:
tabela obiekty ( id integer primary index, nazwa varchar, ... )
tabela slowaKluczowe ( idS integer, slowo varchar primary index )
tabela slowaDoObiekty ( idS integer primary index, id integer, )
Strace na pamieci (redundancja danych - wszystkie nazwy bede musial przekonwertowac do slow kluczowych) ale powinienem zyskac na szybkosci.
I teraz prosze o rady:
Po pierwsze, czy warto w ogole cos takiego robic ? Spodziewam sie, ze bede w bazie mial ok. 40000 obiektow i jakies 5000-10000 slow kluczowych. O ile szybsze moze byc cos takiego od uzycia zwyklego operatora LIKE ? (Googlowalem, nic to nie dalo :( ).
Po drugie, w czasie tworzenia indexu musze wybrac 'metode dostepu'. Uzywam Postgresa, do wyboru mam rtree, btree(default), hash i gist. Ktora z tych struktur najlepiej sie nada do indexowania tabeli slowaKluczowe ? A ktora do slowaDoObiekty ?
I po trzecie czy mozecie polecic jakas dobra ksiazke/artykul o optymalizacji zapytan SQL ? Najchetniej do Postgresa, bo wiem ze kazda baza dziala w inny sposob, ale moze byc tez jakies ogolne opracowanie, byleby z przykladami.
Dzieki za wszelka pomoc i pozdrawiam, Waldemar
Grzegorz Danowski - 13-11-2006 00:45
Użytkownik "Waldemar" <nie@mam.maila.com> napisał w wiadomości news:ehgcvp$917$1@news.task.gda.pl... > Witam, > > Musze zrobic wyszukiwanie po dosc sporej tabeli obiektow. Kazdy obiekt > ma nazwe (czasem przydluga, tak do 40 slow) oraz slowa kluczowe. > > Wyszukiwanie bedzie polegalo na tym, ze user wpisuje fraze ktorej slowa > beda poszukiwane zarowono wsrod nazwy jak i slow kluczowych. > > Wymyslilem sobie, ze zrobie to (w duzym uproszczeniu) tak: > > tabela obiekty ( > id integer primary index, > nazwa varchar, > ... > ) > > tabela slowaKluczowe ( > idS integer, > slowo varchar primary index > ) > > tabela slowaDoObiekty ( > idS integer primary index, > id integer, > ) > > Strace na pamieci (redundancja danych - wszystkie nazwy bede musial > przekonwertowac do slow kluczowych) ale powinienem zyskac na szybkosci.
Nie wiem czy stracisz na pamięci - każde słowo będzie teraz zapisane raz, a powtarzać się będzie tylko 2 * integer, czyli 8 bajtów. Indeksy też pewnie zajmą mniej miejsca.
> > I teraz prosze o rady: > > > Po pierwsze, czy warto w ogole cos takiego robic ? Spodziewam sie, ze > bede w bazie mial ok. 40000 obiektow i jakies 5000-10000 slow
To raczej nie dużo, więc zysk na jednym zapytaniu nie będzie duży (w sekundach), lecz przy dużej liczbie zapytań w określonym przedziale czasu, to zyskasz IMHO dużo.
> kluczowych. O ile szybsze moze byc cos takiego od uzycia zwyklego > operatora LIKE ? (Googlowalem, nic to nie dalo :( ).
A najlepiej potestuj na jakimś prostym przykładzie :-). Pozdrawiam Grzegorz
Misiekd - 13-11-2006 00:45
Dnia Sun, 22 Oct 2006 20:24:01 +0200, Waldemar napisał(a):
> Witam, > > Musze zrobic wyszukiwanie po dosc sporej tabeli obiektow. Kazdy obiekt > ma nazwe (czasem przydluga, tak do 40 slow) oraz slowa kluczowe. > > Wyszukiwanie bedzie polegalo na tym, ze user wpisuje fraze ktorej slowa > beda poszukiwane zarowono wsrod nazwy jak i slow kluczowych. > > Wymyslilem sobie, ze zrobie to (w duzym uproszczeniu) tak: > > tabela obiekty ( > id integer primary index, > nazwa varchar, > ... > ) > > tabela slowaKluczowe ( > idS integer, > slowo varchar primary index > ) > > tabela slowaDoObiekty ( > idS integer primary index, > id integer, > ) > > Strace na pamieci (redundancja danych - wszystkie nazwy bede musial > przekonwertowac do slow kluczowych) ale powinienem zyskac na szybkosci. > > I teraz prosze o rady: > > > Po pierwsze, czy warto w ogole cos takiego robic ? Spodziewam sie, ze > bede w bazie mial ok. 40000 obiektow i jakies 5000-10000 slow > kluczowych. O ile szybsze moze byc cos takiego od uzycia zwyklego > operatora LIKE ? (Googlowalem, nic to nie dalo :( ). > > Po drugie, w czasie tworzenia indexu musze wybrac 'metode dostepu'. > Uzywam Postgresa, do wyboru mam rtree, btree(default), hash i gist. > Ktora z tych struktur najlepiej sie nada do indexowania tabeli > slowaKluczowe ? A ktora do slowaDoObiekty ? > > I po trzecie czy mozecie polecic jakas dobra ksiazke/artykul o > optymalizacji zapytan SQL ? Najchetniej do Postgresa, bo wiem ze kazda > baza dziala w inny sposob, ale moze byc tez jakies ogolne opracowanie, > byleby z przykladami. > > Dzieki za wszelka pomoc i pozdrawiam, > Waldemar
nigdzie nie napisałeś co to za baza będzie ale może co do wyszukiwania w nazwach to FulTextSearch da radę
-- Pozdrawiam Misiekd
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plquentinho.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|