前言:
复合索引原理我要等看mongo指南,手册上看不太懂。
正文:
默认_id存在索引,内嵌域和内嵌文档皆可以创建索引。创建索引时,数据库读写操作会被阻塞,使用background选项后台创建索引,但shell实例会被阻塞。2.4以后可以并发进行后台索引创建。
复合索引:单项索引支持从2个方向读取索引,而复合索引索引方向决定了是否使用该索引。
db.events.createIndex( { "username" : 1, "date" : -1 } )//此索引将同时支持以下两种查询 db.events.find().sort( { username: 1, date: -1 } )//优先username升序其次date降序 db.events.find().sort( { username: -1, date: 1 } ) //但不支持这一种 db.events.find().sort( { username: 1, date: 1 } )
索引前缀:
mongo支持索引前缀,如此索引
{ "item": 1, "location": 1, "stock": 1 }
那么,以下索引将会被支持 包含item键,包含item键和location,包含item键和stock,同时包含此3者。
当单一键索引和compound索引同时存在时,若不使稀疏(sparse)或者唯一索引,单一索引可以直接省略。
复合多键索引:
仅支支持1数组,能够提供数组字段高效查询索引。如果基于数组创建那么mongo会自动创建多键索引。
文本索引:
一个集合只能存在一个文本索引,默认语言为英语。可设置关键字权重等。。。(全文关键字匹配功能)
2D索引: 暂不涉及
TTL索引
db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
索引策略: 复合索引支持以相等的匹配前缀来排序。不需要在内存中进行排序