|
哈希索引:
存在的目的就是为了支持自动对片键进行hash。哈希索引的属性如下:
1、哈新索引必须只有一个单一字段,不能是复合索引
2、被哈希索引的字段必须不能含有数组,哈希索引不能是多建索引
3、哈希索引不能有唯一性约束
4、mongodb能利用哈希索引支持等值查询,但不能用它来进行范围查询
5、哈希索引相对于普通索引不会带来性能优势。然后,当被索引的字段的值大于64位后,哈希索引可能小于普通索引 hash值在索引里长度为64位
6、同一个字段是有可能同时存在哈希索引和非哈希索引的。Mongodb将用非哈希索引进行范围查询
警告:在hash之前,hash索引会将浮点数转变为64位整数。例如,一个hash索引会对一个字段的两个值2.3和2.2存储为一个相同的值。为了防止冲突,对那些不能转换为64位整数一致性的浮点数不要进行hash索引。
创建hash索引的语法如下:
db.active.ensureIndex( { a: "hashed" } )
对active集合中的a字段创建hash索引
以前对集合进行分片的方法如下:
mongos> sh.shardCollection("tt.online_table",{a:1});
利用hash片键对一个集合进行分片:
mongos> sh.shardCollection("tt.online_table",{a:"hashed"});
• 和其他片键索引一样,如果你的集合有数据,那么你必须在进行sharding之前创建hash索引。如果集合没有数据,对集合进行分片将创建索引
• mongos将路由所有的等值查询到特定的片;然而,mongos必须路由范围查询到所有的片
|
|