Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

select distinct ne radi, a obicni select radi (!?)

  • 5 odgovora
  • 3.095 pregleda

Najnovija ↓

select distinct ne radi, a obicni select radi (!?) 22.10.2009. u 15:40 · pre 207 meseci #1
Imam jedan, manje vise, uobicajen select iz trostrukog JOINa.Radi bez ikakvih problema.
Izvlacim tacno jedno polje (ID jedne od tabela koje su u JOINu) i imam jednostavan WHERE uslov

SELECT T1.ID from ...
vraca za jedan sekund 206 rezultata

SELECT DISTINCT T1.ID from...
zakucava, upadne u lock i ne vrati nista ni posle 10 minuta...

nisam hteo da kucam ovde sam skript, ili joinove, nego bih voleo da mi neko kaze uopsteno, zbog cega se ovako nesto moze desiti?
:-(
Potpis
Uhvatili ste me nespremnog
Re: select distinct ne radi, a obicni select radi (!?) 22.10.2009. u 15:54 · pre 207 meseci #2
Deluje cudno. Ja bih rekao da je razlika u tome sto je SELECT DISTINCT skuplja operacija od SELECT, ali s obzirom da imas 206 zapisa onda to otpada, razlike bi bile zanemarljive u malom broj slucajeva, jedino ako ti ID nije nvarchar(max), ili tako nesto egzoticno :)
Re: select distinct ne radi, a obicni select radi (!?) 22.10.2009. u 15:59 · pre 207 meseci #3
ID je int
Jedna tabela ima 20k zapisa, treca ima oko 80k zapisa, a ova izmedju svega desetak
ne znam da li igra ulogu kako sam joinovao tabele, jer on prolazi - vraca mi rezultate besprekorno brzo i tacno, samo ako ne stavim distinct.
Join je 1 na 1, jednom redu prve odgovara jedan red trece tabele, druga (najmanja) sluzi samo za vezivanje prve i trece.
Potpis
Uhvatili ste me nespremnog
Re: select distinct ne radi, a obicni select radi (!?) 22.10.2009. u 16:25 · pre 207 meseci #4
Nisam siguran, ali deluje logicno da posle svih joinova se radi distinct. Probaj da vratis sa podupitom rezultat, mozda se query optimizer zakuca, mada to je isto malo verovatno

Code:

SELECT DISTINCT ID from
(SELECT T1.ID from...)


E da, javi samo rezultat, bas me zanima sta je uzrok ovome.
Re: select distinct ne radi, a obicni select radi (!?) 22.10.2009. u 16:30 · pre 207 meseci #5
Ako vracas samo jednu (ili mali broj) kolonu pokusaj sa gruop by umesto distinct (doduse trebalo bi da generisu isti plan ali probaj). Takodje mozda mozes da rewrite-ujes upit sa where exists (primer: http://www.sql-server-performa...elect_distinct_queries_p1.aspx ).
Potpis
Every hamster has his day.
Re: select distinct ne radi, a obicni select radi (!?) 22.10.2009. u 17:25 · pre 207 meseci #6
Cek samo malo, ako sam shvatio ti imas 1-1 relaciju preko link tabele? Ako smem da pitam sto si to tako radio, zasto ne direktna relacija?

Isto malo mi je cudno da u toj 1-1 konfiguraciji distinct vraca manje rezultata, da bi se neki ID duplirao i time bio podlozan distinct-u kroz join mora da postoji many-to-0/1 u kom slucaju ti je onda poslovna logika zakazala i dozvolila unos podatka koji nije 1-1 .

U svakom slucaju baci nam ovde ako mozes estimated plan za distinct i actual plan za bez distinct-a, distinct bi trebao da je finalni filter na planu, ne bi trebao da utice na ostatak plana.

Isto sto mozes da uradis je da dok cekas tih 10 minuta pogledas ko ti drzi lockove na objekte, tvoj query moze da ima samo IS i S lockove i bar jedan je u WAIT stanju, pogledaj koji drugi proces drzi granted lock na istom resursu i vidi oklen on
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme