[ karas @ 05.05.2006. 12:27 ] @
Čini se da indeksi ne rade dobro ako tabela ima veliki broj redova (nekoliko miliona). Naime, tabela je indeksirana po datumu pa bi pretraga po datumu morala da se odvija koristeći indeks. EXPLAIN to i pokazuje ako je broj redova do otprilike 470 000. Ako je broj redova koje treba pretražiti veći od ovog broja, onda će EXPLAIN pokazati da se pretraga radi sekvencijalno. Da li je neko imao sličan problem?
Verzija je 8.0.3.
[ Milos Babic @ 06.05.2006. 11:56 ] @
Da li skoro radio
Code:

VACUUM ANALYZE


Uradi prvo vacuum pa onda probaj EXPLAIN, jer moze da se dogodi da optimizator upita odabere sekvencijalnu
pretragu, pre nego indeksnu, ako je tabela prevelika, ako je skoro reload-ovana/dump-ovana.

Takodje, zgodno je da odradis
Code:

set enable_seqscan to off;

pa vidi da li je brze.

Kada imas DATE kolonu, a radis cesto delete svih starijih od x, zgodno je s vremena na vreme i da reindexiras index,
jer b-tree (prirodno) ne zna kako da iskoristi neiskoricene strane, ukoliko novi datum ne upada u opseg.

Pozdrav,
Milos Babic
[ perakojotgenije @ 07.05.2006. 12:22 ] @
Sto je sasvim u redu, pri takvoj pretrazi i treba da cita sekvencijalno. Pretpostavljam da citas redove nesto poput 'select neke_kolone from neka_tabela where datum > '01-01-2005' npr. Ukoliko je broj redova koji se vracaju veliki (kao sto si ti primetio, oko pola miliona) onda optimizator zakljuci da mu je jeftinije i brze da cita sekvencijalno tabelu nego da cita index, pa tabelu, pa ponovo index, pa ponovo tabelu...
[ karas @ 10.05.2006. 11:15 ] @
Urađen je potpuni vakuum tabele, pri tome je ispisivao da preuređuje indekse ali nema promene.
Pokušano i sa pravljenjem nove tabele i smeštanjem podataka u nju. U nju se ne upisuju podaci već samo čitaju, pa nema "rupa", ali pretraga po indeksu ne ide za veći broj redova.
Sve u svemu, kao da indeks ima opseg preko kojega ne može.
[ chachka @ 12.05.2006. 06:19 ] @
Nemas razloga za brigu. Indeksi nemaju ogranicenja na broj indeksiranih podataka.

Kao sto ti je Matic vec rekao, na osnovu statistike je optimizator upita (ili vec necega davno sam citao taj deo dokumentacije) odlucio da mu je brze da ne koristi indeks.

Upotreba indeksa nije uvek najbrzi put za koricenje tabele. Primer iz zivota: Kad ja citam knjigu onako od korice do korice ne citam non-stop sadrzaj knjige. Sadrzaj koristim kad hocu da nadjem odredjeno poglavlje.

Chachka

PS: PostgreSQL je izuzetna baza. Steta je sto je slabo zastupljena u praksi, sto siromasnost ovog foruma pokazuje.

[Ovu poruku je menjao chachka dana 12.05.2006. u 07:23 GMT+1]
[ dsmr @ 02.03.2007. 12:51 ] @
Chachka: PostgreSQL je izuzetna baza. Steta je sto je slabo zastupljena u praksi, sto siromasnost ovog foruma pokazuje.



..ali je razmena inforamcija toliko kvalitetena da me je PostgreSQL privukao.