se tu fai
select count(*) from tab2 where tab2.ccc<>5
quanti record hai?
se tu fai
select count(*) from tab2 where tab2.ccc=5
quanti record hai?
se tu fai
select count(*) from tab2 where tab2.ccc<>5
quanti record hai?
se tu fai
select count(*) from tab2 where tab2.ccc=5
quanti record hai?
180k... 20k... perchè?!Originariamente inviato da optime
se tu fai
select count(*) from tab2 where tab2.ccc<>5
quanti record hai?
se tu fai
select count(*) from tab2 where tab2.ccc=5
quanti record hai?
rs.Open "select tab.* from tab where tab.aaa in (select tab2.ccc from tab2 where tab2.ccc<>5 group by tab2.ccc)", objConn, adOpenKeyset, adLockOptimistic, adCmdText
rs.Open "select tab.* from tab where tab.aaa not in (select tab2.ccc from tab2 where tab2.ccc=5 group by tab2.ccc)", objConn, adOpenKeyset, adLockOptimistic, adCmdText
sono equivalenti... la prima è più veloce della seconda nonostante la subquery della seconda restituisca un solo elemento da controllare (e anche la subquery dovrebbe essere più veloce nella seconda)
come sono i tempi delle subquery eseguite da sole?
select tab2.ccc from tab2 where tab2.ccc<>5 group by tab2.cccOriginariamente inviato da optime
come sono i tempi delle subquery eseguite da sole?
è 30 volte più lenta +-
per questo motivo la query che ingloba quella subquery è più lenta! non importa il risultato query+subquery: di solito quella che ammazza è la subquery (e te l'ho dimostrato)
infatti sql (qualunque motore sql) PRIMA esegue la subquery, POI esegue la query esterna.
soddisfatto della spiegazione?
e comunque, SPERO che tu non esegua davvero questa query
select distinct tab2.ccc from tab2 where tab2.ccc=5
![]()
no!Originariamente inviato da optime
per questo motivo la query che ingloba quella subquery è più lenta! non importa il risultato query+subquery: di solito quella che ammazza è la subquery (e te l'ho dimostrato)
infatti sql (qualunque motore sql) PRIMA esegue la subquery, POI esegue la query esterna.
soddisfatto della spiegazione?la prima query è più veloce nonostante la subquery lentissima
quindi è la not in lenta, e in teoria deve fare solo il 10% di controlli... perchè?! bhò... per non parlare della distinct in una subquery... perchè?! bhò... sto cercando in giro, ma non trovo niente ancora, saranno questioni interne
eddai è un esempio... ci andrà una where seria lì![]()
ripeto, la IN e la NOT IN sono i modi più faticosi di fare quello che ti serve. se posti la query *reale* vediamo di sistemarla
DELETE aaa.* FROM aaa WHERE aaa.ID IN (" & Replace(Request.QueryString("d"), "'", "''") & ") AND aaa.ID NOT IN (SELECT bbb.[aaa ID] FROM bbb)
questa query (la query da ottimizzare) deve cancellare degli elementi della tabella aaa - i cui id sono passati tramite un form - solo se non sono presenti nella tabella bbb
stavo misurando i tempi di alcune pagine e mi è venuto in mente di provare diverse query e/o cicli di codice per vedere quale fosse la soluzione più veloce a parità di risultato
la più ovvia non era la più veloce
da' un'occhiata in giro e scegliti la soluzione migliore per la tua situazione
http://www.google.com/search?q=not+i...rlz=1I7DBIT_it