Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 30
  1. #11
    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?

  2. #12
    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?
    180k... 20k... perchè?!

    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)

  3. #13
    come sono i tempi delle subquery eseguite da sole?

  4. #14
    Originariamente inviato da optime
    come sono i tempi delle subquery eseguite da sole?
    select tab2.ccc from tab2 where tab2.ccc<>5 group by tab2.ccc

    è 30 volte più lenta +-

  5. #15
    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?

  6. #16
    e comunque, SPERO che tu non esegua davvero questa query

    select distinct tab2.ccc from tab2 where tab2.ccc=5


  7. #17
    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?
    no! 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ì

  8. #18
    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

  9. #19
    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

  10. #20
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.