Pergunta

Como escrever uma consulta que seleciona os itens 2000-2010 de uma coleção de 10000 objetos no armazenamento de dados.

Eu sei que isso pode ser feito assim no GQL:

select * from MyObject limit 10 offset 2000

De acordo com documentação, ao usar um offset O motor ainda buscará todas as linhas, apenas não as devolverá, fazendo com que a consulta seja executada de uma maneira que corresponda linearmente com o valor de offset.

Existe alguma maneira melhor? Como usar um pseudo ROWNUM coluna como se poderia fazer em outros tipos de lojas de dados.

Foi útil?

Solução

Não há como página com eficiência usando compensações, exceto para armazenar em cache os resultados. Você pode, no entanto, usar Cursores de dados Para implementar a paginação usando uma abordagem do tipo 'marcador'.

Outras dicas

Além de usar cursores, você também pode usar uma abordagem de ordem de classificação. Por exemplo:

SELECT * FROM MyObject ORDER BY field LIMIT 10;

Para os 10 primeiros objetos e depois para os próximos 10 objetos, etc.

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

O campo pode até ser uma chave se você não tiver outro campo apropriado. Aqui está um exemplo mais completo:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top