Citat:
Originalno napisao mb_sa
Nadam se da ne pravim veliki offtopic.
Nisam za ovo do sada čuo, pa mi je intesantno! Jeli moze neko objašnjenje?
Hvala.
|
Offtopic: Svaki record ima header u kojem sadrzi pointere i ostale informacije o kolonama i sadrzaju tih kolona (fix/variable length, null/not null, data type ... ), tako da se malkice dobija na I/O performansama ukoliko je selektovana kolona na pocetku recorda umjesto na kraju... Nije svejedno da li moras proci kroz 50 pointera, da bi dosao do zeljenog na 51.-om mjestu ili da moras proci 2 pointera, da bi dosao do treceg, kojim dolazis do selektovane kolone... Ovo dolazi do izrazaja pri full table scanu i kad imas velik broj redova, kao sto je u ovom primjeru 2-5 miliona... Ja sam imao slucajeva u kojima se u SQL upitu koristi tabela sa ca. 60 kolona i 30 miliona redova, a jedna od tih kolona se koristi u WHERE uslovu... E sad, kao sto je i bilo ocekivano da ce za svaku od vrijednosti te kolone biti izvrsen full table scan, tako je i bilo, ali je bilo uzasno sporo... Nakon dublje analize, shvatio sam da je to mozda zbog toga sto se ta kolona nalazi na predzadnjem mjestu, tako da se mora proci maltene citav record, da bi se doslo do trazene vrijednosti te kolone... Nakon sto sam napravio kopiju te tabele, ali uz bitnu izmjenu - tu kolonu sam stavio na drugo mjesto - brzina izvrsavanja se poboljsala za ca. 30%
Ontopic: Index na koloni country ce pomoci, ako je selectivity za zeljenu zemlju manji od 15-20%, a u suprotnom ce biti ignorisan i izvrsice se full table scan...