Domanda

È una di quelle cose che sembra avere una curva strana per cui più ci penso, più ha senso.In una certa misura, ovviamente.E poi per me non ha assolutamente senso.

Vuoi illuminarmi?

È stato utile?

Soluzione

Perché nella maggior parte dei casi devi prima ordinare i risultati.Ad esempio, quando esegui una ricerca su Google, puoi visualizzare solo fino a 100 pagine di risultati.Non si preoccupano di ordinare in base al page-rank oltre i 1000 siti web per una determinata parola chiave (o combinazione di parole chiave).

L'impaginazione è veloce.L'ordinamento è lento.

Altri suggerimenti

Lubos è giusto, il problema non è il fatto che stai effettuando il paging (il che toglie un'ENORME quantità di dati dal cavo), ma che devi capire cosa sta effettivamente succedendo sulla pagina..

Il fatto che sia necessario eseguire la paginazione implica che ci siano molti dati.Molti dati richiedono molto tempo per essere ordinati :)

Questa è una domanda davvero vaga.Ci vorrebbe un esempio concreto per avere un'idea migliore del problema.

Questa domanda sembra abbastanza ben trattata, ma aggiungerò qualcosa di specifico per MySQL in quanto attira molte persone:

Evitare di utilizzare SQL_CALC_FOUND_ROWS.A meno che il set di dati non sia banale, contare le corrispondenze e recuperare un numero x di corrispondenze in due query separate sarà molto più rapido.(Se esso È banale, noterai a malapena la differenza in ogni caso.)

Pensavo che intendessi impaginazione della pagina stampata - è lì che mi sono fatto le ossa.Stavo per entrare in un grande monologo sulla raccolta di tutti i contenuti della pagina, sul posizionamento (un vasto numero di regole qui, i motori di vincolo sono molto utili) e sulla giustificazione...ma a quanto pare stavi parlando del processo di organizzazione delle informazioni sulle pagine web.

Per questo, immagino che i risultati del database.L'accesso al disco è lento.Una volta che lo hai in memoria, l'ordinamento è economico.

Ovviamente l'ordinamento su una query casuale richiede un po' di tempo, ma se riscontri problemi con l'utilizzo regolare della stessa query impaginata, c'è qualcosa di sbagliato nell'impostazione del database (indicizzazione errata/nessuna, memoria insufficiente ecc.Non sono un db-manager) o stai sbagliando gravemente l'impaginazione:

Terribilmente sbagliato:per esempio.facendo select * from hugetable where somecondition; in un array ottenendo il conteggio delle pagine con array.length scegli gli indici rilevanti e scarta l'array, quindi ripeti l'operazione per ogni pagina...Questo è ciò che chiamo seriamente sbagliato.

La soluzione migliore è due domande:uno ottiene solo il conteggio, poi un altro ottiene i risultati utilizzando limit E offset.(Alcuni server SQL proprietari e non standard potrebbero avere un'opzione di query, non lo so)

La cattiva soluzione potrebbe effettivamente funzionare abbastanza bene su tabelle di piccole dimensioni (in effetti non è impensabile che sia più veloce su tabelle molto piccole, perché il sovraccarico di fare due query è maggiore che ottenere tutte le righe in una query.Non lo dico È quindi...) ma non appena il database comincia a crescere i problemi diventano evidenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top