Forum » Programiranje » [SQL] Ali se tale poizvedba da optimizirat?
[SQL] Ali se tale poizvedba da optimizirat?
krho ::
Ali se tale poizvedba da optimizirat?
SELECT idPerson, firstName, lastName, emails FROM person WHERE idPerson NOT IN (SELECT idPerson FROM groupToPerson) AND idBook = 9;
Zakaj?
Zato, ker mi tole smrdi po dolgem izvajanju pri velikem št. podatkov v tabeli groupToPerson.
SELECT idPerson, firstName, lastName, emails FROM person WHERE idPerson NOT IN (SELECT idPerson FROM groupToPerson) AND idBook = 9;
Zakaj?
Zato, ker mi tole smrdi po dolgem izvajanju pri velikem št. podatkov v tabeli groupToPerson.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
- spremenil: krho ()
bostjan113 ::
SELECT idPerson, firstName, lastName, emails FROM person
WHERE not exists ( SELECT * FROM groupToPerson WHERE groupToPerson.idPerson = person.idPerson)
AND idBook = 9;
EXISTS in NOT EXISTS delujeta mnogo hitreje kot IN in NOT IN.
WHERE not exists ( SELECT * FROM groupToPerson WHERE groupToPerson.idPerson = person.idPerson)
AND idBook = 9;
EXISTS in NOT EXISTS delujeta mnogo hitreje kot IN in NOT IN.
krho ::
bostjan113-ova poizvedba je že pri majhnem št. hitrejša za >50%.
@BigWhale in kako bi se ti znebil subselecta?
(smajli pove vse (tvoj namreč))
@BigWhale in kako bi se ti znebil subselecta?
(smajli pove vse (tvoj namreč))
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Reso ::
Bostjan je imel prav. Edino še malo se da pohitriti:
SELECT idPerson, firstName, lastName, emails FROM person
WHERE idBook = 9
AND not exists ( SELECT 'a' FROM groupToPerson WHERE groupToPerson.idPerson = person.idPerson) ;
Če pa hočeš še večjo hitrost pa naštimaj indexe na person.idPerson in groupToPerson.idPerson.
SELECT idPerson, firstName, lastName, emails FROM person
WHERE idBook = 9
AND not exists ( SELECT 'a' FROM groupToPerson WHERE groupToPerson.idPerson = person.idPerson) ;
Če pa hočeš še večjo hitrost pa naštimaj indexe na person.idPerson in groupToPerson.idPerson.
Zgodovina sprememb…
- spremenil: Reso ()
BigWhale ::
Subselekta se znebis tako, da naredis dva locena selekta. To je lahko hitreje kot en subselekt.
krho ::
@Reso:
saj v Boštjanovem sem * iz subquerija že sam zamenjal s idPerson
@BigWhale:
ne bo šlo. Ena poizvedba mora vrniti samo prave rezultate.
Pač s podatki direktno iz baze napolnim svoje objekte.
saj v Boštjanovem sem * iz subquerija že sam zamenjal s idPerson
@BigWhale:
ne bo šlo. Ena poizvedba mora vrniti samo prave rezultate.
Pač s podatki direktno iz baze napolnim svoje objekte.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Sergio ::
Naredi si view namesto subselecta, pa namesto SQL querija uporabi stored procedure.
Kaj bolje?
Kaj bolje?
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.
če usoda ustavi mu korak,
on se ji zoperstavi.
krho ::
Za 1x sem s boštjanovo rešitvijo zadovoljen.
Podatki se iz baze preberejo samo ob zagonu ali ob zahtevi uporabnika. Med samim življenjem programa, pa se vse spremembe v tabelah 'same' pošljejo objektom, ki so zahtevali da so obveščemni o teh spremembah.
Podatki se iz baze preberejo samo ob zagonu ali ob zahtevi uporabnika. Med samim življenjem programa, pa se vse spremembe v tabelah 'same' pošljejo objektom, ki so zahtevali da so obveščemni o teh spremembah.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# INSERT statment ne vpise podatkovOddelek: Programiranje | 1200 (1074) | darkolord |
» | php updateOddelek: Programiranje | 919 (733) | keworkian |
» | php skripta za registracijo uporabnikovOddelek: Izdelava spletišč | 2077 (1658) | skorpio |
» | razložitev nekaterij elementov v visual studio 05Oddelek: Programiranje | 2099 (1904) | darkolord |
» | Obleci nas!Oddelek: Novice / Grafične kartice | 2400 (2400) | root987 |