[ Solution @ 02.12.2005. 01:15 ] @
Imam problem sa optimizacijom SQL upita, pa ti hosting vec po drugi put iskljucuje sajt.

Imam tabelu korisnici koja cuva registrovane korisnika. Trenutno ima oko 6000 zapisa.
Imam tabelu ocene u koju se cuvaju ocene koji korisnici dobijaju i ona ima oko 700.000 zapisa.
Prilikom prikazivanja slika korisnika na sajtu, slike se biraju RANDOM. Posto su se korisnici sajta zalili kako im se ne svidja to sto se slike ponavljaju resio sam da kreiram joj jednu tabelu ocenjene_slike koja cuva za svakog korisnika koju slika mu se prikazuje. Kada korisnik oceni necu sliku izvrsavali bi se sledeci upiti.
1. U tabeli ocene bi se dodao nivi zapis.
2. izvrsava se select upit nad tabelom korisnici kako bi se korisniku prikazala sledeca slika

taj upit izgleda ovako
select id,korisnik,... from korisnici where ((select count(*) from ocenjene_slike where korisnici.id=osobaID and " & lbKorisnikID.Text & "=logovanaOsobaID)=0
da pojasnim samo malo, OsobaID je ID ocenjenog korisnika u tabeli ocenjene_slike i logovanaOsobaID je ID korisnika koji ocenjuje.

ovaj podupit sam napravio samo sa ciljem da bi se izbeglo ponavljanje slika. Medjutim pretpostavljam da on previse opterecuje server. Da li moze da se resi ovaj problem? Da li bi problem bio resen ako bi koristio NOT IN klauzu?






[ negyxo @ 02.12.2005. 08:12 ] @
Malo si konfuzan ovim pitanjem ali sva sreca sajt ti vise govori :)

Prvo, ako vec mislis da ti query radi sporo proteraj Profiler pa vidi koliko mu treba vremena pa onda uporedi sa nekim drugim query-jem.


Code:

SELECT 
    id,
    ...
FROM 
    Korisnici
    LEFT JOIN (SELECT * FROM Ocenjene_Slike WHERE logovanaOsobaID = @idOsobe) AS OS ON OS.osobaID = Korisnici.id
WHERE
    OS.osobaID IS NULL


Code:

SELECT 
    id,
    ...
FROM 
    Korisnici    
WHERE
    id NOT IN (SELECT OsobaID FROM Ocenjene_Slike WHERE logovanaOsobaID = @idOsobe)

@idOsobe je parametar, pa nemoj da te to buni njega bolje prosledi nego da spajas stringove



[Ovu poruku je menjao negyxo dana 02.12.2005. u 09:14 GMT+1]
[ Boris Maletic @ 05.12.2005. 21:23 ] @
Indexi su JAKO vazni - pokreni index tuning wizard i primeni njegove preporuke.