Indeksy wielokolumnowe - praktyka?
Leszek Pachura - 26-01-2007 00:03
Indeksy wielokolumnowe - praktyka?
Czesc,
Wiele baz danych oferuje mozliwosc zakladania wielokolumnowych indeksow, ktore przyspieszaja zapytania o wszystkie poindeksowane pola na raz. Dodatkowo, indeks na polach (a-b-c-d) dziala jednoczesnie jak indeksy (a), (a-b) i (a-b-c).
Tyle teoria. A praktyka?
Na przyklad, taki podstawowy problem - przy zalozeniu ze indeks jest zaimplementowany jako B+drzewo (lub jakas wariacja na ten temat) - jaka powinna byc optymalna kolejnosc indeksowania kolumn? Zaczac od kolumny w ktorej jest najwiecej roznych wartosci, czy najmniej (np. plec)? A moze sa jakies inne reguly?
W helpie do Postgresa natknalem sie na taki tekst: "In most situations, an index on a single column is sufficient and saves space and time. Indexes with more than three columns are unlikely to be helpful".
Prawda-to czy falsz? W produkcie z ktorym zaczalem niedawno pracowac (baza to Oracle 10) indeksy nawet 5-kolumnowe sa uzywane czesto i gesto.
Dzieki!
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
dap - 26-01-2007 00:03
Leszek Pachura wrote: > Czesc, > > Wiele baz danych oferuje mozliwosc zakladania wielokolumnowych indeksow, ktore > przyspieszaja zapytania o wszystkie poindeksowane pola na raz. Dodatkowo, > indeks na polach (a-b-c-d) dziala jednoczesnie jak indeksy (a), (a-b) i (a-b-c). > > Tyle teoria. A praktyka? > > Na przyklad, taki podstawowy problem - przy zalozeniu ze indeks jest > zaimplementowany jako B+drzewo (lub jakas wariacja na ten temat) - jaka powinna > byc optymalna kolejnosc indeksowania kolumn? Zaczac od kolumny w ktorej jest > najwiecej roznych wartosci, czy najmniej (np. plec)? A moze sa jakies inne > reguly? > > W helpie do Postgresa natknalem sie na taki tekst: "In most situations, an > index on a single column is sufficient and saves space and time. Indexes with > more than three columns are unlikely to be helpful". > > Prawda-to czy falsz? W produkcie z ktorym zaczalem niedawno pracowac (baza to > Oracle 10) indeksy nawet 5-kolumnowe sa uzywane czesto i gesto.
Jak producent tak zaleca to trzeba tak robic.
Ja w swojej praktyce preferuje bardziej 5 jednokolumnwych indekow niz 1 piecokolumnowy no chyba, ze 5 kolumnowy jest bardziej optymalny.
dap
hubert depesz lubaczewski - 26-01-2007 00:03
On 2007-01-25, Leszek Pachura <pachuraWYTNIJTO@op.pl> wrote: > byc optymalna kolejnosc indeksowania kolumn? Zaczac od kolumny w ktorej jest > najwiecej roznych wartosci, czy najmniej (np. plec)? A moze sa jakies inne > reguly?
ja bym zaczął od tej co ma najwięcej różnych.
> W helpie do Postgresa natknalem sie na taki tekst: "In most situations, an > index on a single column is sufficient and saves space and time. Indexes with > more than three columns are unlikely to be helpful".
to bardzo ogólne zdanie. nie traktuj tego jako wyroczni.
> Prawda-to czy falsz?
ekhem. w bazach nie ma "prawda i fałsz". wszystko zależy od okoliczności. każda, nawet najbardziej podstawową regułę można złamać jeśli taka jest faktyczna potrzeba. indeksy > 3 pola - *zazwyczaj* nieprzydatne. ale czasem - jedyne sensowne.
depesz
-- http://www.depesz.com/ - blog dla ciebie
Lucyna Witkowska - 27-01-2007 00:02
Leszek Pachura <pachuraWYTNIJTO@op.pl> napisał: > Wiele baz danych oferuje mozliwosc zakladania wielokolumnowych indeksow, ktore > przyspieszaja zapytania o wszystkie poindeksowane pola na raz. Dodatkowo, > indeks na polach (a-b-c-d) dziala jednoczesnie jak indeksy (a), (a-b) i (a-b-c).
> Tyle teoria. A praktyka?
> Na przyklad, taki podstawowy problem - przy zalozeniu ze indeks jest > zaimplementowany jako B+drzewo (lub jakas wariacja na ten temat) - jaka powinna > byc optymalna kolejnosc indeksowania kolumn? Zaczac od kolumny w ktorej jest > najwiecej roznych wartosci, czy najmniej (np. plec)? A moze sa jakies inne > reguly?
Wybor odpowiedniego indeksu powinien zalezec od zapytan jakie beda wykonywane. Jesli bedzie wykonywane SELECT * FROM tab WHERE a=.. i SELECT * FROM tab WHERE a=.. AND b=.. to sensowne jest utworzenie indeksu (a,b). Jesli wykonywane beda tylko zapytania a= i b= to kolejnosc kolumn nie ma znaczenia (Oracle).
> W helpie do Postgresa natknalem sie na taki tekst: "In most situations, an > index on a single column is sufficient and saves space and time. Indexes with > more than three columns are unlikely to be helpful". > Prawda-to czy falsz?
To jest prawda statystyczna ;-)
> W produkcie z ktorym zaczalem niedawno pracowac (baza to > Oracle 10) indeksy nawet 5-kolumnowe sa uzywane czesto i gesto.
Jesli zapytania uzywaja wszystkich 5 kolumn - czemu nie? Pozdrowienia, LW
Marek Horodyski - 27-01-2007 00:02
Użytkownik "hubert depesz lubaczewski" <depesz@depesz.com> napisał w wiadomości news:gahn84-e0c.ln1@xxx.home.depesz.com... > On 2007-01-25, Leszek Pachura <pachuraWYTNIJTO@op.pl> wrote: >> byc optymalna kolejnosc indeksowania kolumn? Zaczac od kolumny w ktorej >> jest >> najwiecej roznych wartosci, czy najmniej (np. plec)? A moze sa jakies >> inne >> reguly? > > ja bym zaczął od tej co ma najwięcej różnych. > >> W helpie do Postgresa natknalem sie na taki tekst: "In most situations, >> an >> index on a single column is sufficient and saves space and time. Indexes >> with >> more than three columns are unlikely to be helpful". > > to bardzo ogólne zdanie. nie traktuj tego jako wyroczni. > >> Prawda-to czy falsz? > > ekhem. w bazach nie ma "prawda i fałsz". wszystko zależy od > okoliczności. > każda, nawet najbardziej podstawową regułę można złamać jeśli taka jest > faktyczna potrzeba. > indeksy > 3 pola - *zazwyczaj* nieprzydatne. > ale czasem - jedyne sensowne.
Akurat w Oraclu mialem indeks na 4 kolumnach (kiedy+na_jakim_nosniku+kto+co), wykorzystywany do spradzenia unikalnosci na tych wlasnie kolumnach. Zmienily sie zalozenia, i w obliczeniach mialem podac na warunkach jakiego miesiaca mam wynik - czyli cos jak data waluty obok daty transakcji. No i musialem dodac : kiedy+na_jakim_nosniku+kto+co+na_kiedy. Tak ze widac iz takie potrzeby po prostu sie zdarzaja.
Pozdrawiam, Marek Horodyski
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[pgsql] 7.4 =?ISO-8859-2?Q?og=B3upia=B3_przy_zak=B3adaniu_?==?ISO-8859-2?Q?indeksu?=
=?ISO-8859-2?Q?=5BORACLE=2C_ORDER_BY=5D_Czy_indeksowane_?==?I SO-8859-2?Q?kolumny_przy=B6piesz=B1_sortowanie=3F?=
=?ISO-8859-2?Q?Re=3A_Informatyka=2C_Java=2C_EJB=2C_Ajax=2C?== ?ISO-8859-2?Q?_Spring=2E_Czy=BFby_to_koniec_=B6wiata=2C_czy? ==?ISO-8859-2?Q?_te=BF_nasze_uczelnie_b=EAd=B1_uczy=B3y_w_k?== ?ISO-8859-2?Q?o=F1cu!_czego_praktyczne?=
[postgresql] szukanie po indeksie tsearch'owym wlecze sie - da siejakos przyspieszyc?
[MSSQL 2000] procedura kopiująca rekordy i indeks UNIQUE
[MySQL] Indeksy =?iso-8859-2?Q?pe=B3notekstowe?= a kodowanie
indeks w =?iso-8859-2?Q?po=B3=B1czeniu?= z lower()
indeksacja bazy płatnika via osql / składnia
[PGSQL] Sortowanie wg indeksu innej tabeli
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 |
|