- 浏览: 84875 次
- 性别:
- 来自: 西安
最新评论
-
w67856101:
sssss
在Spring中使用jcaptcha实现图片验证 -
yjq8116:
不错。很有收获
Spring MVC 源码学习札记(四)HandlerMapping和HandlerAdapter(4) -
rolenz:
mongodb越来越火,但是网上的资料不是很全,希望深入的写些 ...
MongoDB学习(二)索引的用法 -
sha0k:
rolenz 写道能不能说说replSet到底如何进行认证我才 ...
MongoDB学习(一)安装和基本使用 -
rolenz:
能不能说说replSet到底如何进行认证
MongoDB学习(一)安装和基本使用
MongoDB与sql关于库表的名字:
database == database
collection == table
document == row
本篇转载自:http://blog.nosqlfan.com/html/271.html
索引能提高检索数据的速度,你可以想像成在MySQL中创建索引一样,同样索引也是用B-Tree也实现的。
1.单列索引
在字段x上创建索引,1 (表示升序) or -1 (表示降序)
> db.data.ensureIndex({x:1})
显示表data里面的所有索引
> db.data.getIndexes() [ { "name" : "_id_", "ns" : "recommender.data", "key" : { "_id" : 1 } }, { "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"), "ns" : "recommender.data", "key" : { "x" : 1 }, "name" : "x_1" } ]
查找字段x为6的值,此时已经用到索引了
> db.data.find({x:6}) { "_id" : ObjectId("4bee804ba23d558eb6687117"), "x" : 6, "name" : "caihuafeng1" } { "_id" : ObjectId("4bee804ba23d558eb6687118"), "x" : 6, "name" : "caihuafeng2" } { "_id" : ObjectId("4bee804ba23d558eb6687119"), "x" : 6, "name" : "caihuafeng3" } { "_id" : ObjectId("4bee804ba23d558eb668711a"), "x" : 6, "name" : "caihuafeng4" } { "_id" : ObjectId("4bee804ba23d558eb668711b"), "x" : 6, "name" : "caihuafeng5" } { "_id" : ObjectId("4bee804ba23d558eb668711c"), "x" : 6, "name" : "caihuafeng6" } { "_id" : ObjectId("4bee804ba23d558eb668711d"), "x" : 6, "name" : "caihuafeng7" } { "_id" : ObjectId("4bee804ba23d558eb668711e"), "x" : 6, "name" : "caihuafeng8" } { "_id" : ObjectId("4bee804ba23d558eb668711f"), "x" : 6, "name" : "caihuafeng9" } { "_id" : ObjectId("4bee804ba23d558eb6687120"), "x" : 6, "name" : "caihuafeng10" }
2.默认索引
上述1中db.data.getIndexes()显示出来的一共有2个索引,其中_id是创建表的时候自动创建的索引,此索引是不能够删除的。
3.文档作为索引的键值
a.单列索引
往数据库recommender的表data中插入三条记录
> db.data.insert({name:"1616",info:{url:"http://www.1616.net/",city:"beijing"}}); > db.data.insert({name:"hao123",info:{url:"http://www.hao123.com/",city:"beijing"}}); > db.data.insert({name:"ll4la",info:{url:"http://www.114la.com/",city:"dongguan"}});
对字段info创建索引
> db.data.ensureIndex({info: 1});
显示表data上的所有索引
> db.data.getIndexes(); [ { "name" : "_id_", "ns" : "recommender.data", "key" : { "_id" : 1 } }, { "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"), "ns" : "recommender.data", "key" : { "x" : 1 }, "name" : "x_1" }, { "_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"), "ns" : "recommender.data", "key" : { "info" : 1 }, "name" : "info_1" } ]
查找指定的记录,此时会用到索引
> db.data.find({info: {url:"http://www.1616.net/",city:"beijing"}}); { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }
b.组合索引
建立组合索引
> db.data.ensureIndex({"info.url":1, "info.city":1}); > db.data.getIndexes(); [ { "name" : "_id_", "ns" : "recommender.data", "key" : { "_id" : 1 } }, { "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"), "ns" : "recommender.data", "key" : { "x" : 1 }, "name" : "x_1" }, { "_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"), "ns" : "recommender.data", "key" : { "info" : 1 }, "name" : "info_1" }, { "_id" : ObjectId("4befb9d1b0e29ba1ce20e0c0"), "ns" : "recommender.data", "key" : { "info.url" : 1, "info.city" : 1 }, "name" : "info.url_1_info.city_1" } ]
下面几个操作均会用到索引
> db.data.find({"info.url": "http://www.1616.net/", "info.city": "beijing"}); { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } > db.data.find({"info.url": "http://www.1616.net/"}); { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }
1表示升序(asc),-1表示降序(desc)
> db.data.find({"info.url": /http:*/i}).sort({"info.url": 1, "info.city": 1}); { "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114la.com/", "city" : "dongguan" } } { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } { "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } } > db.data.find({"info.url": /http:*/i}).sort({"info.url": 1}); { "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114la.com/", "city" : "dongguan" } } { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } { "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } } > db.data.find({"info.url": /http:*/i}).sort({"info.url": -1}); { "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } } { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } { "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114la.com/", "city" : "dongguan" } }
4.组合索引
注意,这里的组合索引与上述3中的b中的组合索引是有点不同的,4里面是对一级字段建立组合索引,而上述3中是对二级字段建立组合索引。
在字段name及info上面创建组合索引
> db.data.ensureIndex({name: 1, info: -1});
MongoDB中索引的用法
本文是一篇转载文章,作者在对MongoDB 文档进行了细致的阅读后,总结出了MongoDB的各种索引的用法。
原文链接:http://iamcaihuafeng.blog.sohu.com/151638529.html
索引能提高检索数据的速度,你可以想像成在MySQL中创建索引一样,同样索引也是用B-Tree也实现的。
1.单列索引
在字段x上创建索引,1 (ascending) or -1 (descending)
> db.data.ensureIndex({x:1})
显示表data里面的所有索引
> db.data.getIndexes() [ { "name" : "_id_", "ns" : "recommender.data", "key" : { "_id" : 1 } }, { "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"), "ns" : "recommender.data", "key" : { "x" : 1 }, "name" : "x_1" } ]
查找字段x为6的值,此时已经用到索引了
> db.data.find({x:6}) { "_id" : ObjectId("4bee804ba23d558eb6687117"), "x" : 6, "name" : "caihuafeng1" } { "_id" : ObjectId("4bee804ba23d558eb6687118"), "x" : 6, "name" : "caihuafeng2" } { "_id" : ObjectId("4bee804ba23d558eb6687119"), "x" : 6, "name" : "caihuafeng3" } { "_id" : ObjectId("4bee804ba23d558eb668711a"), "x" : 6, "name" : "caihuafeng4" } { "_id" : ObjectId("4bee804ba23d558eb668711b"), "x" : 6, "name" : "caihuafeng5" } { "_id" : ObjectId("4bee804ba23d558eb668711c"), "x" : 6, "name" : "caihuafeng6" } { "_id" : ObjectId("4bee804ba23d558eb668711d"), "x" : 6, "name" : "caihuafeng7" } { "_id" : ObjectId("4bee804ba23d558eb668711e"), "x" : 6, "name" : "caihuafeng8" } { "_id" : ObjectId("4bee804ba23d558eb668711f"), "x" : 6, "name" : "caihuafeng9" } { "_id" : ObjectId("4bee804ba23d558eb6687120"), "x" : 6, "name" : "caihuafeng10" }
2.默认索引
上述1中db.data.getIndexes()显示出来的一共有2个索引,其中_id是创建表的时候自动创建的索引,此索引是不能够删除的。
An index is always created on _id. This index is special and cannot be deleted. The _id index enforces uniqueness for its keys.
3.文档作为索引的键值
a.单列索引
MongoDB的官方文档上面是这样说的:
Documents as Keys
Indexed fields may be of any type, including documents:
往数据库recommender的表data中插入三条记录
> db.data.insert({name:"1616",info:{url:"http://www.1616.net/",city:"beijing"}}); > db.data.insert({name:"hao123",info:{url:"http://www.hao123.com/",city:"beijing"}}); > db.data.insert({name:"ll4la",info:{url:"http://www.114la.com/",city:"dongguan"}});
对字段info创建索引
> db.data.ensureIndex({info: 1});
显示表data上的所有索引
> db.data.getIndexes(); [ { "name" : "_id_", "ns" : "recommender.data", "key" : { "_id" : 1 } }, { "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"), "ns" : "recommender.data", "key" : { "x" : 1 }, "name" : "x_1" }, { "_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"), "ns" : "recommender.data", "key" : { "info" : 1 }, "name" : "info_1" } ]
查找指定的记录,此时会用到索引
> db.data.find({info: {url:"http://www.1616.net/",city:"beijing"}}); { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }
b.组合索引
建立组合索引
> db.data.ensureIndex({"info.url":1, "info.city":1}); > db.data.getIndexes(); [ { "name" : "_id_", "ns" : "recommender.data", "key" : { "_id" : 1 } }, { "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"), "ns" : "recommender.data", "key" : { "x" : 1 }, "name" : "x_1" }, { "_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"), "ns" : "recommender.data", "key" : { "info" : 1 }, "name" : "info_1" }, { "_id" : ObjectId("4befb9d1b0e29ba1ce20e0c0"), "ns" : "recommender.data", "key" : { "info.url" : 1, "info.city" : 1 }, "name" : "info.url_1_info.city_1" } ]
下面几个操作均会用到索引
> db.data.find({"info.url": "http://www.1616.net/", "info.city": "beijing"}); { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } > db.data.find({"info.url": "http://www.1616.net/"}); { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }
1表示升序(asc),-1表示降序(desc)
> db.data.find({"info.url": /http:*/i}).sort({"info.url": 1, "info.city": 1}); { "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114la.com/", "city" : "dongguan" } } { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } { "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } } > db.data.find({"info.url": /http:*/i}).sort({"info.url": 1}); { "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114la.com/", "city" : "dongguan" } } { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } { "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } } > db.data.find({"info.url": /http:*/i}).sort({"info.url": -1}); { "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } } { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } { "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114 la.com/", "city" : "dongguan" } }
4.组合索引
注意,这里的组合索引与上述3中的b中的组合索引是有点不同的,4里面是对一级字段建立组合索引,而上述3中是对二级字段建立组合索引。
在字段name及info上面创建组合索引
> db.data.ensureIndex({name: 1, info: -1});
显示所有的索引
> db.data.getIndexes(); [ { "name" : "_id_", "ns" : "recommender.data", "key" : { "_id" : 1 } }, { "_id" : ObjectId("4befb146b0e29ba1ce20e0bb"), "ns" : "recommender.data", "key" : { "x" : 1 }, "name" : "x_1" }, { "_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"), "ns" : "recommender.data", "key" : { "info" : 1 }, "name" : "info_1" }, { "_id" : ObjectId("4befb9d1b0e29ba1ce20e0c0"), "ns" : "recommender.data", "key" : { "info.url" : 1, "info.city" : 1 }, "name" : "info.url_1_info.city_1" }, { "_id" : ObjectId("4befbfcfb0e29ba1ce20e0c1"), "ns" : "recommender.data", "key" : { "name" : 1, "info" : -1 }, "name" : "name_1_info_-1" } ]
下面的排序将用到上面的索引
> db.data.find({"info.url": /http:*/i}).sort({name:1, info: -1}); { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } { "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } } { "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114la.com/", "city" : "dongguan" } }
5.唯一索引
往表data中插入一条记录。
> db.data.insert({firstname: "cai", lastname: "huafeng"});
由于表data中只有一记录有字段firstname及lastname,其它的行均没有相应的值,也就是均为null,为null就说明是相同的,而唯一索引是不允许有相同的值的,所以下面创建唯一组合索引时报错了。
所以建立唯一索引时,不管是对单个字段还是多个字段建立索引,则最好每一行均有此字段,否则会报错。
> db.data.find(); { "_id" : ObjectId("4bee745a0863b1c233b8b7ea"), "name" : "caihuafeng" } { "_id" : ObjectId("4bee745f0863b1c233b8b7eb"), "website" : "1616.net" } { "_id" : ObjectId("4bee804ba23d558eb6687117"), "x" : 6, "name" : "caihuafeng1" } { "_id" : ObjectId("4bee804ba23d558eb6687118"), "x" : 6, "name" : "caihuafeng2" } { "_id" : ObjectId("4bee804ba23d558eb6687119"), "x" : 6, "name" : "caihuafeng3" } { "_id" : ObjectId("4bee804ba23d558eb668711a"), "x" : 6, "name" : "caihuafeng4" } { "_id" : ObjectId("4bee804ba23d558eb668711b"), "x" : 6, "name" : "caihuafeng5" } { "_id" : ObjectId("4bee804ba23d558eb668711c"), "x" : 6, "name" : "caihuafeng6" } { "_id" : ObjectId("4bee804ba23d558eb668711d"), "x" : 6, "name" : "caihuafeng7" } { "_id" : ObjectId("4bee804ba23d558eb668711e"), "x" : 6, "name" : "caihuafeng8" } { "_id" : ObjectId("4bee804ba23d558eb668711f"), "x" : 6, "name" : "caihuafeng9" } { "_id" : ObjectId("4bee804ba23d558eb6687120"), "x" : 6, "name" : "caihuafeng10" } { "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } } { "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } } { "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114la.com/", "city" : "dongguan" } } { "_id" : ObjectId("4befc51ab0e29ba1ce20e0c2"), "firstname" : "cai", "lastname" : "huafeng" } > db.data.ensureIndex({firstname: 1, lastname: 1}, {unique: true}); E11000 duplicate key error index: recommender.data.$firstname_1_lastname_1 dup key: { : null, : null }
6.删除索引
a.删除某个表中的所有索引
db.collection.dropIndexes();
b.删除某个表中的单一索引
db.collection.dropIndex({x: 1, y: -1}) > db.data.dropIndex({firstname: 1, lastname: 1}); { "nIndexesWas" : 6, "ok" : 1 }
相关推荐
MongoDB是一种流行的NoSQL数据库,它的索引机制与传统的关系型数据库类似,旨在提升查询和排序的速度。在MongoDB中,索引对于优化查询性能至关重要,尤其在处理大量数据时。下面将详细介绍MongoDB中不同类型的索引...
MongoDB支持的索引种类很多,诸如单键索引,复合索引,多键索引,TTL索引,文本索引,空间地理索引等。同时索引的属性可以具有唯一性,即唯一索引。唯一索引用于确保索引字段不存储重复的值,即强制索引字段的唯一性...
在本文中,我们将深入探讨 MongoDB 数据库索引的基础知识、类型、创建方式、使用注意点等方面的内容。 索引基础 ---------- 为什么需要索引?索引可以显著地提高查询性能。例如,在没有索引的情况下,MongoDB 需要...
MongoDB的索引是数据库性能优化的关键因素,与MySQL、Oracle等关系型数据库中的索引原理相似,但具有自身的特性和限制。MongoDB的索引建立在Collection(表)级别,采用B-树数据结构来加速查询和排序操作。 1. 默认...
本压缩包“MongoDB学习文档.zip”包含了一个名为“MongoDB学习文档.docx”的文件,该文件很可能是对MongoDB的基础知识、安装配置、操作指南以及Java API使用的详细介绍。 MongoDB的核心特性包括其灵活性、高可用性...
通过官方手册,你可以了解每个MongoDB命令和操作符的具体用法,包括增删改查操作、聚合框架、地理空间索引等。手册还涵盖了安全主题,如身份验证、授权和网络安全性,确保你的MongoDB部署安全可靠。对于开发者来说,...
创建索引使用createIndex()方法,可以指定字段和排序(升序或降序),还可以创建唯一索引和复合索引。索引的管理还包括删除索引的操作,如dropIndex()和dropIndexes(),以及获取现有索引列表的getIndexes()方法。 ...
本文实例讲述了pymongo为mongodb数据库添加索引的方法。分享给大家供大家参考。具体实现方法如下: ... 您可能感兴趣的文章:MongoDB索引使用详解MongoDB的基础查询和索引操作方法总结pymongo给mongodb创建索
这份"mongodb 学习文档"涵盖了多个方面的内容,包括MongoDB的基础概念、安装配置、数据模型、查询操作、聚合框架、索引管理、复制集、分片集群等关键知识点。下面将对这些主题进行详细阐述。 一、基础概念 MongoDB...
10. **MongoDB工具**:MongoDB提供了一系列的管理工具,如`mongo shell`、`mongodump/mongorestore`、`mongostat/mongotop`等,了解它们的用途和使用方法可以帮助更有效地管理和维护数据库。 11. **MongoDB驱动程序...
**二、MongoDB索引** 索引是提升MongoDB查询性能的关键工具。它们为数据库中的数据创建了一个预排序的数据结构,使得数据查找更快。MongoDB支持多种类型的索引,包括单键索引、复合索引、文本索引、地理空间索引等...
### TTL索引创建方法 创建TTL索引的命令是通过`db.collection.createIndex(keys, options)`实现的,其中`keys`是一个代表索引字段的对象,而`options`是一个包含额外选项的对象,其中可以指定`expireAfterSeconds`...
MongoDB 提供了两种方法来查看集合上的索引。`db.COLLECTION_NAME.getIndexes()` 方法返回集合上所有索引的详细信息,而 `db.system.indexes.find()` 方法则会查询`system.indexes`集合,展示所有数据库的索引信息...
#### MongoDB索引 - **介绍**:索引能够显著提高查询性能,MongoDB支持单字段索引、复合索引、唯一索引等多种类型的索引。 - **后台创建索引**:可以在运行时创建索引,而无需停止服务。 - **索引类型**: - **单...
本文将深入探讨MongoDB中创建简单索引的方法及其重要性。 首先,理解索引的概念至关重要。索引是一种特殊的数据结构,它在数据库中用于加速数据检索。在MongoDB中,索引按照特定的字段或字段组合进行排序,使得查询...