» »

[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.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
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. 8-)

BigWhale ::

Se bolj bos pohitril zadevo, ce se bos znebil sub selecta. ;)

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č))
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
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.

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.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
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?
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
č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.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# INSERT statment ne vpise podatkov

Oddelek: Programiranje
111200 (1074) darkolord
»

php update

Oddelek: Programiranje
7919 (733) keworkian
»

php skripta za registracijo uporabnikov

Oddelek: Izdelava spletišč
162077 (1658) skorpio
»

razložitev nekaterij elementov v visual studio 05

Oddelek: Programiranje
72099 (1904) darkolord
»

Obleci nas!

Oddelek: Novice / Grafične kartice
132400 (2400) root987

Več podobnih tem