Dal blog di Appengine:In che modo appengine implementa la query su un elenco in modo efficiente?
Pianificazione avanzata delle query - Stiamo eliminando la necessità di utilizzare gli indici e di ridurre i requisiti degli indici personalizzati per molte query. L'SDK suggerirà indici migliori in diversi casi e un prossimo articolo descriverà quali ulteriori ottimizzazioni sono possibili.
Come prova, ho un'entità in AppEngine che ha un ListProperty
class Entity(db.Model):
tags = db.StringListProperty()
devo 500.000 soggetti, la metà di loro hanno tag = [ '1'], e l'altra metà hanno tag = [ '2']
mia domanda è
SELECT FROM Entity WHERE tags='1' and tags='2'
Esso non ha prodotto risultati molto velocemente. Che piano sta usando per raggiungere questo obiettivo? Come viene indicizzato l'elenco per raggiungere questo obiettivo? Ai vecchi tempi sarebbe stato necessario un indice esplosivo.
IIRC è stato trattato in uno dei discorsi tecnici: non ha mai richiesto un indice di esplosione, solo una StringListProperty – bdonlan
Nessuna delle modifiche avanzate alla pianificazione delle query influirà su questa query. Come hai inserito le entità? Se tutti quelli con tag = 2 hanno ID superiori a quelli con tag = 1 (o viceversa), questa query è banale da soddisfare. –
Penso che la query fosse: SELECT FROM Entity WHERE tags = '1' e tags = '2' ORDER BY date – Jaap