跳至主要内容

Compound Index

Compound index為對多個field建立的index。

Introduction

Compound index的先後順序很重要,因為index會依照先後順序去做排序。

  • 先依照第一個key排序,若遇到一樣的則依照第二個key排序

E.g. compound index { a: 1, b: 1}{ b: 1, a: 1}的意思是不一樣的。

Sort order

當建立了一個compound index {name: 1, age: -1},則以下兩種排序的Query都可以利用index

  • db.Person.find().sort( { name: 1, age: -1 } )
  • db.Person.find().sort( { name: -1, age: 1 } )
    • 此Query只需把index倒過來就好

然而,以下排序的Query無法利用index

  • db.Person.find().sort( { name: 1, age: 1 } )
  • db.Person.find().sort( { name: -1, age: -1 } )

Prefix

若有個compound index {name: 1, age: -1},則以下Query可以利用此index

  • db.Person.find( { name: 1 } )
  • db.Person.find( { name: 1, age: 1 } )

原因為{name: 1}為該index的Prefix

因此,若需要在name建立index,同時也需要建立compound index{name: 1, age: 1},則只需要建立compound index就好。