troppo aggiungere un po 'di più per s' Baloo risposta.
Sul time stamp contro il lungo problema. Generalmente il server MongoDB non vedrà una differenza. La lunghezza di codifica BSON è la stessa (64 bit). È possibile che si verifichi una prestazione diversa sul lato client a seconda della codifica del driver. Ad esempio, sul lato Java a utilizzando il driver 10gen un timestamp viene visualizzato come Date
che è molto più pesante di Long
. Ci sono drivers che cercano di evitare quel sovraccarico.
L'altro problema è che si vedrà un miglioramento delle prestazioni se si chiude l'intervallo per il primo campo dell'indice. Quindi, se si utilizza l'indice suggerito da Baloo:
db.collection.ensureIndex({start: 1, final: 1})
query È si esibiranno (potenzialmente molto) meglio se si domanda è:
db.collection.find({start:{$gt:DateTime(...),$lt:DateTime(...)},
final:{$lt:DateTime(...)}})
Concettualmente, se si pensa degli indici come aa albero la gamma chiusa limita entrambi i lati dell'albero invece di un solo lato. Senza l'intervallo chiuso, il server deve "controllare" tutte le voci con un valore start
superiore al timestamp fornito poiché non conosce la relazione tra start
e final
.
Si può anche scoprire che che le prestazioni di query non è migliore usando un unico indice di campo, come:
db.collection.ensureIndex({start: 1})
La maggior parte dei risparmi è dalla potatura del primo campo. Il caso in cui ciò non avverrà è quando la query è coperta dall'indice o l'ordinamento/l'ordinamento per i risultati può essere derivato dall'indice.
HTH - Rob.
fonte
2013-03-24 19:37:00
Sì, sono a conoscenza dell'indice di composizione. L'unica cosa che ho paura in questo caso non sarà vantaggi per la query composita su una singola query di campo. Ma non lo so per certo. Pensa ad alcuni esperimenti necessari. –
Fintanto che il campo singolo è il primo campo dell'indice composito, sei pronto per partire – baloo