Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Order By

  1. #1

    Order By

    Ciao a tutti!
    Premetto che uso SQL SERVER 2000 .
    Ho una tabella con circa 300.000 record.
    Ho varie query di selezione con la clausola ORDER BY.
    Se la mia query è una semplice " SELECT * FROM MIA_TABELLA " va tutto bene,
    ma se gli metto un ORDER BY la query diventa così lenta che è quasi
    impossibile aspettare il risultato.
    Per migliorare le Performance, avevo pensato di inserire degli Indici.
    Purtroppo però le mie query non hanno sempre lo stesso campo nell' ORDER BY.
    Ho creato anche più indici, ma purtroppo non sò come richiamre (da SQL)
    l'uno o l'altro Indici.
    Qualcuno sà darmi una mano ???
    Se la strada degli indici è sbagliata, ditemi vuoi cosa devo fare per
    riuscire a velocizzare questa query.


    Grazie in Anticipo !!!!!!
    <MARQUEE>email : <a href="mailto:r.leboffe@goel.it" ><font face="Verdana,Arial" size="2" color="#000066">r.leboffe@goel.it</font></a> /<a href="mailto:leboffe@goel.it" ><font face="Verdana,Arial" size="2" color="#000066"> leboffe@goel.it </font></a>/<a href="mailto:rino.leboffe@libero.it" ><font face="Verdana,Arial" size="2" color="#000066"> rino.leboffe@libero.it</font></a></MArquee>

  2. #2
    se hai dichiarato gli indici direttamente nel db, la order by li sfrutta direttamente senza nessun'altra azione da parte tua.

  3. #3

    ......

    Per "direttamente nel DB" intendi dire non tramite SQL ????
    Cioè nel mio caso usando la voce gestione indici nel menù del tasto destro sulla tabella ????
    Quindi se ne creo diversi, verranno utilizzati a seconda dell'order by???
    <MARQUEE>email : <a href="mailto:r.leboffe@goel.it" ><font face="Verdana,Arial" size="2" color="#000066">r.leboffe@goel.it</font></a> /<a href="mailto:leboffe@goel.it" ><font face="Verdana,Arial" size="2" color="#000066"> leboffe@goel.it </font></a>/<a href="mailto:rino.leboffe@libero.it" ><font face="Verdana,Arial" size="2" color="#000066"> rino.leboffe@libero.it</font></a></MArquee>

  4. #4
    ... direi di si'. Hai gia' fatto una prova?

  5. #5
    Non sono sicuro di averla fatta correttamente, appena vado in ufficio ci riprovo.
    Ma i campi che uso negli indici, devono essere impostati come campi CHIAVE ?????

    Scusa ma era una domanda...
    <MARQUEE>email : <a href="mailto:r.leboffe@goel.it" ><font face="Verdana,Arial" size="2" color="#000066">r.leboffe@goel.it</font></a> /<a href="mailto:leboffe@goel.it" ><font face="Verdana,Arial" size="2" color="#000066"> leboffe@goel.it </font></a>/<a href="mailto:rino.leboffe@libero.it" ><font face="Verdana,Arial" size="2" color="#000066"> rino.leboffe@libero.it</font></a></MArquee>

  6. #6
    No gli indici non devono essere necessariamente campi chiave, cioè constraints. Per verificare se gli indici che hai creato sono efficaci prova ad eseguire le queries con il Query Analizer con l'opzione di visualizzazione del piano di esecuzione. Vedi così come si comporta il server nell'estrazione dei dati.

    Ciao.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    4

    ho lo stesso problema, che disdetta

    Allora, io lo stesso problema, come mi "azzardo" ad effettuare una selezione di un recordset (es. select * from tabella order by titolo, dove titolo è anche il nome di campo ma anche di un indice), il sistema rallenta in modo poazzesco e sono costretta ad interropmpere interompere la pagina, cosa posso fare ? grazie belinda

  8. #8
    Il nome dell'indice non importa: l'importante è che l'indice Titolo punti al campo Titolo.
    Il problema che hai può essere dovuto a diversi fattori:

    1) Prima di tutto l'hardware: se usi SQL Server devi avere un hw adatto
    2) Se l'oggetto della query è una tabella e non una vista può essere un problema di numero di records e modalità di apertura del recordset (attenta che se apri un recordset di un milione di righe in modalità client e non asincrona la tua macchina inizia a swappare tutto su disco)
    3) Se l'oggetto della query non è una tabella ma una vista allora ci possono essere problemi di join nella vista.

    Soluzione? Dipende, ma un consiglio lo posso dare: se il Titolo è il campo per il quale fai sempre l'ORDER BY mettilo in un indice CLUSTER in modo da indicizzarlo fisicamente: in questo caso non dovrai più fare l'order by.

    Ciao.

  9. #9
    un altro tip. evita la SELECT *. La maggior parte delle volte (mi ci metto anch'io) scriviamo cosi' per pigrizia. Meglio elencare i campi. Se ti servono in effetti solo due-tre campi su venti, il sistema risponde molto piu' velocemente.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    4

    Indice cluster

    in questo caso ok, creo un indice di tipo cluster, ma come faccio ad aprirlo visto che mi dici di aprirlo senza l'order by ?
    "io avro' select titoto,id from tabella where titolo=12 " e poi? , oppure invece di fare il select dalla tabella, lo faccio direttamente dal nome dell'indice (cioè se l'indice si chiama primary_key, dovro digitare qualcosa del genere "select titolo, campo from primary_key where......", esatto ? ho capito bene ?, grazie ciao

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.