Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    Domanda su pulizia e velocità di una query e di un database

    Ciao a tutti.
    Sto realizzando un database che contiene un elenco di articoli, suddiviso in due tabelle. Una contiene l'elenco delle categorie, e l'altra gli articoli veri e propri (ciascuno appartenente alla sua categoria).

    Come struttura del database, per allegerirlo, avevo pensato a mettere il numero di articoli presente nelle categorie nella stessa tabella delle categorie. Numero che si incrementa ogni volta si inserisce un articolo.

    La query quindi risultava semplicissima:
    codice:
    sql="SELECT * " & _
        "FROM Shop_Categorie " & _
        "WHERE NumArticoli > 0 " & _
        "ORDER BY Categoria"
    Ho pensato però che, onde evitare errori nell'inserimento degli articoli, e che si sporchi il numero di articoli (che ne so, un inserimento andato male, una modifica diretta sul database, ci sono più fattori che potrebbero alterare quel numero) avrei potuto usare una query di questo genere:

    codice:
      
    sql=" SELECT   Shop_Categorie.IDCat,                      " &_
        "          Shop_Categorie.Categoria,                  " &_
        "          Count(Shop_Articoli.IDArt) AS NumArticoli  " &_
        " FROM     Shop_Categorie, Shop_Articoli              " &_
        " WHERE    Shop_Categorie.IDCat = Shop_Articoli.IDCat " &_
        " GROUP BY Shop_Categorie.IDCat,                      " &_
        "          Shop_Categorie.Categoria                   " &_
        " ORDER BY Shop_Categorie.Categoria                   "
    Questa query funziona benissimo, mi da gli stessi risultati e mi evita di utilizzare il campo NumArticoli contenente il numero di articoli da calcolare ogni volta che se ne inserisce uno...

    Il punto è... quest'ultima query è molto dispendiosa in termini di performances? Dovrei forse usare il primo metodo?

    Un'altra domanda... c'è un tool in ASP x esempio o uno script che mi può dire i tempi di risposta e le prestazioni in genere del database con l'una o l'altra query sopra scritta?

    Aspetto notizie fiducioso.
    Ciao a tutti!
    Claudio Di Vicino

  2. #2
    che db stai usando?
    le funzioni di aggregazione (count eccettera) con la group by un minimo rallentano sempre la que8ry, ma bisogna anche sapere quanti dati si scaricano, su un 200 righe la differenza è infinitesimale ...

  3. #3
    Ciao, (purtroppo) sto utilizzando un database Access, creato con Access 2000. La mole di record da scaricare dalla tabella padre non è tanta... saranno al più 50-60 records. La tabella figlio ne può ospitare N, diciamo che, grossomodo, dovrebbero essere intorno ai 2000 records. La tabella figlio è quella dove viene effettuato il COUNT
    Claudio Di Vicino

  4. #4
    più veloce la prima

  5. #5
    ha ragione cicciopie ... anche se usando la prima soluzione sei costretto, ad ogni inserimento sulla tabella figlio, a modificare volta per volta la tabella madre ... insomma velocizzi la lettura ma rallenti la scrittura ....

    per access non so se esistano dei tracer tipo quelli di SQLserver ... provo a dare un occhiata ...

  6. #6
    Beh lo so che è + veloce la prima, però come è meglio gestire il problema sopra descritto? Mettendo un campo NumArticoli che si incrementa ogni volta che si cancella un articolo e si decrementa ogni qual volta l'articolo si cancella o si sposta da una categoria all'altra, oppure è meglio effettuare una query più complessa come quella scritta per sapere quanti articoli sono presenti in una determinata categoria?

    A livello di "rischi" la seconda mi sembra molto più pulita, però temo che il Db si rallenti parecchio...

    Ripeto anche la domanda già che ci sono
    Esiste un tool per conoscere le performances di una query? In SAP ad esempio c'è... magari in ASP c'è un codice già fatto...

    Ricordo i dati:
    Tabella padre: circa 70 records al più
    Tabella figlio: circa 2000 records al più (secondo me saranno sotto i 700 ma meglio abbondare)

    Grazie a entrambi x le rapide risposte
    Claudio Di Vicino

  7. #7
    a conti fatti io userei la seconda, è molto più pulita e gestibile, evita errori vari in scrittura e quant'altro ...

    per il controllo non so ...

  8. #8
    Originariamente inviato da vaargard
    evita errori vari in scrittura e quant'altro ...
    ci sono le transazioni

  9. #9
    E già che ci sono! Un'altra domanda... in SAP so che effettuare l'ORDER BY da query è molto dispendioso per il database... c'è un modo per scaricare i dati di una query in una struttura, in ASP, per poi ordinare quella struttura? Così posso evitarmi di fare un loop basato sulla fine del mio recordset, e non farei interrogazioni continue al database.

    Ad es. io faccio:

    codice:
    DO WHILE NOT rs.EOF
    %>...blablabla...=rs("IDCat")%>&Cat=<%=Server.URLEnc...etc..<%
      rs.MoveNext
    LOOP
    Se si potesse fare qualcosa del tipo
    codice:
    FOR i = 0 to ubound(Struttura)
    %> ...blabla..<%=Struttura.IDCat[i]%>...blabla...<%
    NEXT
    C'è il modo? Si otterrebbero prestazioni migliori?
    Claudio Di Vicino

  10. #10
    Originariamente inviato da cicciopie
    ci sono le transazioni
    Ehm... ovvero? Transazione per me ora come ora assume un altro significato (Sempre il maledetto SAP)
    Claudio Di Vicino

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 © 2025 vBulletin Solutions, Inc. All rights reserved.