数据库索引建立在哈希函数,B树和B+树的基础上。
MongoDB
- MongoDB默认会在所包含的所有集合的_id属性上创建一个索引。
- 注意解释函数的调用,这是一个查询性能的测量函数,输出也是一个文档:
- db.jihe.find().explain();
- Cursor: 游标用来返回查询结果集。
- Nscanned:被扫描的尸体总数,使用索引时对应索引实体的总数。
- nscannedObject:扫描的文档总数。
- N:返回的文档总数。
- Millis:查询的耗时,单位是毫秒。
- indexBounds:表示查新匹配的索引范围的最小建和最大键。
- 在MongoDB中,关键字ensureIndex完成了大部分创建索引的工作。如:db.集合名.ensureIndex( { 列名 : 1 (-1) } ),表示升序或者降序。获得所有索引的列表使用getIndexs()函数。重新建立索引使用reIndex(),也可以使用runCommand(),例如db.runCommand( { reIndex : '集合名' } )。可以使用dropIndex命令删除索引。
- 如果需要,可以使用hint方法强制查询使用特定的索引,如强制使用降序:db.集合名.find( { movie_id : 1 } ).hint( { movie_id : -1} )。
- 可以创建组合索引,如:db.集合名.ensureIndex( { 列名 : 1 (-1) , 列名 : 1 (-1) .....} )。创建后可以单用。
- 组合索引也可以包含嵌套字段。
- 可以通过显示声明来创建一个稀疏索引:db.集合名.ensureIndex( { 列名 : 1 (-1) , { sparse : true } } )。如果字段无值就会被忽略,所以稀疏索引可能没有引用集合中的所有文档。
- 可以创建唯一索引:db.集合名.ensureIndex( { 列名 : 1 (-1) , { unique : true } } )。但是列名必须各不相同,否则不会创建,除非显式声明除第一个条目外,所有重复都可以丢弃。这样的显示声明:db.集合名.ensureIndex( { 列名 : 1 (-1) , { unique : true , dropDups : true } } )。如果列名为空,则保存null,但是只保存第一个。
- MongoDB中可以创建多重键,即为数组中的每个唯一值创建一个键。
CouchDB
- CouchDB的索引功能是自动的,在数据被修改后,第一次读取时触发。CouchDB遵循MapReduce风格的数据操作。
Apache Cassandra
- 像HBase和Hypertable这样的列族数据库默认基于行健进行排序和索引。还可以支持次级索引。