Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    185

    Clausula LIMIT in MySql come viene elaborata?

    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

    utilizzando la clausula limit nelle Select MySql mi é venuto un dubbio, se aggiungo ordinamenti, il motore del database deve:
    1_eseguire la query nel totale
    2_ordinare in base all'ordinamento
    3_andare nella riga che mi interessa e tirare fuori l'offset indicato.

    Il dubbio che mi é sorto che allora la query viene cmq eseguita tutta nel suo complesso, significa che se faccio una query che come risultato ha 100000000000 elementi, lui prima li tira fuori tutti e 100000000000 , li ordina, e poi ne estrae quei pochi che ho indicato nel offset.

    Quindi alla fine se la query é pesante rimane comunque pesante????o sbaglio?

    e allora il LIMIT a che serve?

    grazie ciao

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    No, non sbagli, almeno nel caso dell'ordinamento.
    Il LIMIT serve ad ottenere solo i risultati che ti servono, e non di più. Ad esempio nel caso di paginazioni, o magari perché, per qualsiasi motivo, ti interessano solo i primi N casi. Senza LIMIT saresti costretto a gestire la cosa in altra maniera sicuramente meno comoda.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    185
    sifica che per l'utente una quey di 20 elementi dura tanto come quella di 10000000 elementi, e quindi ogni volta che mi sposto per pagina, se la query dura 5 minuti dovro ogni paginazione attendere 5 minuti, mi pare un po dispendioso.

    credo che a sto punto mi carico il risultato in locale e poi mi arrangio diversamente a paginarlo.

    grazie ciao

  4. #4
    Originariamente inviato da tntgiallo
    sifica che per l'utente una quey di 20 elementi dura tanto come quella di 10000000 elementi
    Assolutamente no, e puoi verificarlo agevolmente
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    185
    Originariamente inviato da gm
    Assolutamente no, e puoi verificarlo agevolmente
    Quindi mi dici che le fasi di elaborazione di una query con LIMIT non sono queste?
    1_eseguire la query nel totale
    2_ordinare in base all'ordinamento
    3_andare nella riga che mi interessa e tirare fuori l'offset indicato.


    vorrei capire se succede questo????

    SELECT * FROM A
    Risultato 50 Elementi
    Tempo Esecuzione = 50secondi

    SELECT * FROM A LIMIT 10
    Risultato 10 Elementi
    Tempo Esecuzione = 10secondi

    Esempio per assurdo tanto per capirci, in effetti ci saranno tempi di preparazione della query e tempi di partenza e fine uguali per tutte e due i casi, e in piu i 10 o 50 secondi sono messi solo per capirci, e non sono reali.

    grazie

  6. #6
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    185
    da quel che spiega, nel caso di ordinamenti, si interrompe quando trova il numero necessario di risposte, ma in casi sfavorevoli, potrebbe essere che si fa scorrere tutta la tabella.

    se non ho capito male.

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    In effetti, io non conosco bene gli algoritmi dei db, ma mi sembra problematico interrompere l'ordinamento prima di averlo finito...

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.