Domanda

Come si potrebbe fare per scrivere una query che seleziona i prodotti 2000-2010 di una collezione di 10.000 oggetti nell'archivio dati.

So che si può fare in questo modo in GQL:

select * from MyObject limit 10 offset 2000

Secondo il documentazione , quando si utilizza un offset il motore ancora recuperare tutte le righe, solo non li ritorno, rendendo così la query svolgere in modo che corrisponda linearmente con il valore di offset.

C'è un modo migliore? Come l'utilizzo di una colonna pseudo ROWNUM come si potrebbe fare in altri tipi di archivi dati.

È stato utile?

Soluzione

Non c'è alcun modo per efficientemente pagina utilizzando offset, ad eccezione di memorizzare nella cache i risultati. È possibile, tuttavia, utilizzare datastore cursori per implementare il paging utilizzando un approccio di tipo 'segnalibro'.

Altri suggerimenti

Oltre a utilizzare i cursori si può anche utilizzare un approccio ordinamento. Ad esempio:

SELECT * FROM MyObject ORDER BY field LIMIT 10;

per i primi 10 oggetti e quindi per i prossimi 10 oggetti, ecc.

SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10;

Il campo potrebbe anche essere una chiave, se non si dispone di un altro campo appropriato. Ecco un esempio più completo:

http://code.google.com/appengine/articles/paging.html

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