2011-05-18 22 views
6

Necesito indexar una colección por dos campos (índice único), digamos campo1 y campo2. ¿Qué es mejor enfoque en términos de rendimiento:MongoDB: índice de dos campos frente a índice de campo de documento

  1. Crear un índice de dos columnas regulares

    -o -

  2. combinar esos dos campos en un solo campo del documento {campo1: valor, campo2: value2} e indexar ese campo?

Nota: siempre preguntaré por esos dos campos juntos.

Respuesta

3

Puede mantener las columnas separadas y crear un único índice que aumentará el rendimiento al consultar ambos campos juntos.

db.things.ensureIndex({field1:1, field2:1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes

Tener las columnas en la misma columna proporciona ningún aumento de rendimiento, porque usted debe ponerlos en un índice de la misma manera:

db.things.ensureIndex({fields.field1:1, fields.field2:1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-EmbeddedKeys

O usted puede indexar el documento completo

db.things.ensureIndex({fields: 1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-DocumentsasKeys

Podría haber un posible aumento de rendimiento, pero dudosamente mucho. Use la base de datos de prueba, cree datos de prueba y compare algunas pruebas para determinarlo. Nos encantaría escuchar tus resultados.

1

Crearía un índice compuesto en ambos campos. Esto ocupará menos espacio en disco porque no necesitará almacenar el campo combinado adicional, y le dará la bonificación de un índice adicional sobre el primer campo, es decir, un índice sobre { a:1, b:1 } también es un índice sobre { a:1 }.

+0

Bueno, si voy a almacenar esos dos campos juntos o en campos separados, consumirá el mismo espacio. Además, siempre consultaré por los dos campos juntos, por lo que el segundo beneficio que enumeró no se aplicará allí también. Todo lo que me interesa es el rendimiento de las consultas. ¿Algunas ideas? – Andrey

+0

Si combina los campos, usará un poco menos de espacio porque no necesitará almacenar ambos nombres de campo. En términos de rendimiento de consultas, no creo que haya mucha diferencia, lo mejor es intentarlo, MongoDB tiene algunas características de creación de perfiles agradables: http://www.mongodb.org/display/DOCS/Base de datos + Analizador –

Cuestiones relacionadas