SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
|
Alati teme | Način prikaza |
30. 05. 2011. | #1 |
Ivan Dilber
Sir Write-a-Lot
|
LIKE i index u mysql
Znam za pricu da mysql ne koristi index ako mu se zada upit sa LIKE '%nesto%', medjutim u ovom clanku Peter Zaitsev navodi upravo taj primer i kaze da taj upit koristi index.
Proverio sam na test bazi u lokalu, sa istom tabelom koju on koristi i explain kaze da ne koristi index?! Da je neko drugi u pitanju mislio bih da lupeta ili se zeznuo nesto, ali Peter je faca i zna sta prica, tako da ce pre biti da ja nesto nisam dobro razumeo? Ili se zeznuo zaista?
__________________
Leadership is the art of getting people to want to do what you know must be done. |
30. 05. 2011. | #2 |
Branimir Momcilovic
Qualified
Datum učlanjenja: 15.02.2006
Lokacija: Beograd
Poruke: 167
Hvala: 47
25 "Hvala" u 8 poruka
|
Upit
Kôd:
select c from t1 where c = “abc” order by c limit 1 Kôd:
select c from t1 where c like “abc%” order by c limit 1 Eh sad, ovaj zbunjujući: Kôd:
select c from t1 where c like “%abc%” order by c limit 1 - forward index scan
__________________
Važnije je biti ljubazan, nego biti u pravu. |
30. 05. 2011. | #3 |
Super Moderator
Knowledge base
Datum učlanjenja: 02.10.2006
Lokacija: Niš
Poruke: 1.618
Hvala: 263
275 "Hvala" u 104 poruka
|
zasto?
u Select deo ne ide kriterijum pretrage, vec mu se tu samo kaze koje dodatne kolone treba da pokupi kada utvrdi koji slogovi odgovaraju kriterijumu. jedino ako mislis da on radi table scan jer proceni da bi mu "index scan + dodatno citanje tih dodatnih kolona" oduzelo vise vremena nego table scan [koji odradi u jednom naletu] ? po toj logici bi se indexi retko kad koristili, jer uglavnom svi upiti fetch-uju i ta dodatna polja. |
30. 05. 2011. | #4 |
old school
Professional
Datum učlanjenja: 15.06.2005
Lokacija: Novi Beograd
Poruke: 448
Hvala: 21
70 "Hvala" u 46 poruka
|
Ako je kolona po kojoj se radi like jedina u indeksu, onda je očekivano pretraživanje samo preko indeksa:
* prolazak kroz indeks je brzi (indeks fizički manje zauzima blokova na disku) * kako lociram slog kroz indeks koji zadovoljava upit, imam direktan pointer i na odgovarajući slog u bazi (za izvlačenje ostalih polja iz SELECT dela)
__________________
http://www.vesic.org | Blog: http://www.vesic.org/blog/ | Fina kolekcija programa: http://www.vesic.org/programi/ |
30. 05. 2011. | #5 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
@Peca: Teoretski (pošto zaista ne znam kako konkretno radi MySQL), to da li je bolje da se radi index scan ili table scan, zavisi od toga koliko tabela ima kolona, koje od njih izvlačiš za select, ali i od procenta redova koje upit treba da vrati (npr. za velike slogove a mali procenat onih koji odgovaraju kriterijumu, svakako je bolje da se radi index scan bez obzira na to šta stoji u SELECT), tako da je do query planera da odluči da li je bolje da gleda indeks ili tabelu.
__________________
blog |
30. 05. 2011. | #6 |
Ivan Dilber
Sir Write-a-Lot
|
a kako se radi scan kad je u pitanju binarno stablo? Samo prodje kroz sve cvorove redom?
__________________
Leadership is the art of getting people to want to do what you know must be done. Poslednja izmena od ivanhoe : 30. 05. 2011. u 14:53. |
30. 05. 2011. | #8 |
Branimir Momcilovic
Qualified
Datum učlanjenja: 15.02.2006
Lokacija: Beograd
Poruke: 167
Hvala: 47
25 "Hvala" u 8 poruka
|
@peca Loše sam napisao, zavisi od konkretnog slučaja, trebalo je da napišem: može da se desi da uradi table scan. Kao što je jablan već rekao, zavisi od konkretnog slučaja šta će da odluči engine.
Sve ovo pričam na osnovu iskustva sa ms sql... Edit: Ispravio/dopunio bih prvi odgovor, ali ne mogu da editujem poruku, u svakom slučaju hvala na ispravci.
__________________
Važnije je biti ljubazan, nego biti u pravu. Poslednja izmena od BraMom : 30. 05. 2011. u 16:07. |
30. 05. 2011. | #9 |
Ivan Dilber
Sir Write-a-Lot
|
@jablan: vidis, vidis... ziveo sam u iluziji da je btree i binary tree isto...
__________________
Leadership is the art of getting people to want to do what you know must be done. |
09. 06. 2011. | #10 |
Super Moderator
Invented the damn thing
Datum učlanjenja: 06.06.2005
Poruke: 2.371
Hvala: 370
701 "Hvala" u 194 poruka
|
Sad naleteh na ovu raspravu (posto kolega i ja razmatramo koriscenje indexa u slucaju suffix pretrage -> like '%something'). Imho iako je u pitanju fenomenalan blog, u pitanju je clanak iz 2006 godine (poprilicno mator) a obzirom na dinamiku razvoja MySQL-a ja se radije drzim manuala. Uporedite samo razlike u textu za verzije 5.5 i 5.1 i bice vam jasno o cemu pricam
http://dev.mysql.com/doc/refman/5.5/...l-indexes.html http://dev.mysql.com/doc/refman/5.1/...l-indexes.html |
|
|