2012-03-07 19 views
7

asumir un documento hipotético con 3 campos:MongoDB - índice único vs índice compuesto

  1. _id: OBJECTID
  2. emailAddress: cadena
  3. cuenta: cadena

Ahora, dada una consulta en la dirección de correo electrónico Y cuenta, cuál de los siguientes dos índices tendrá un mejor rendimiento:

  1. índice único en emailAddress solo (asuma que es un campo único)
  2. Índice Compuesto de cuenta y emailAddress

Respuesta

14

En términos de rendimiento la diferencia será pequeña en el mejor. Debido al hecho de que sus direcciones de correo electrónico son únicas, cualquier índice compuesto que tenga un campo de correo electrónico nunca será más útil que un índice solo en la dirección de correo electrónico. La razón de esto es que su campo de correo electrónico ya tiene la cardinalidad máxima para su colección y cualquier otro campo de índice no ayudará a la base de datos a filtrar registros más rápidamente ya que siempre llegará a los documentos correctos con solo el campo de correo electrónico.

En términos de uso de memoria (que es muy importante para bases de datos como MongoDB), el índice de correo electrónico solo es mucho más pequeño también.

TL; DR: Utilice el índice solo en la dirección de correo electrónico.

+0

Esta es la dirección en la que me he estado inclinando también, y la consideración de espacio generalmente significa que el índice de correo electrónico solo es la decisión correcta. Es por eso que lo he votado a favor. Sin embargo, en su respuesta no veo una prueba convincente de cuál de las dos opciones funciona mejor en el caso promedio. –

+2

Bueno, eso debería ser fácil de deducir. Si el índice A (solo correo electrónico) hace exactamente la misma caminata b-tree que el índice B (compuesto), no hay posibilidad de que el índice compuesto sea más rápido. –

3

Cuando se trata de Índices, el objetivo es crear un índice único con la cardinalidad más alta posible (o "selectividad"). Intente escribir consultas que usen 1 índice (compuesto) por consulta. Los índices únicos tienen cardinalidad máxima. La combinación de índices únicos con campos menos selectivos no puede aumentar aún más ese máximo. Agregar más índices solo ralentiza las consultas de find(), update() y remove(). Así que sé "delgado y mezquino".

Sin embargo, si está utilizando una especie() en el campo de la cuenta, mientras que hace un hallazgo() en el campo de correo electrónico, entonces usted debe utilizar un índice compuesto:

es común para consultar en múltiples claves y ordenar los resultados . Para estas situaciones, los índices compuestos son los mejores. http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ

Así que piense bien! Si necesita ordenar los datos por otro campo, generalmente necesita un índice compuesto.

Cuestiones relacionadas