MongoDB索引详解:单键、复合与更多

0 下载量 3 浏览量 更新于2024-08-30 收藏 257KB PDF 举报
MongoDB的学习--索引类型和属性 在MongoDB中,索引是提高查询性能的关键工具,它们可以帮助数据库更快地定位和检索数据。本篇将详细解释不同类型的索引及其应用场景。 1. 单键索引(SingleFieldIndexes) 单键索引是最基础的索引类型,它针对集合中的单一字段进行创建。例如,在`users`集合中,如果我们想对`score`字段创建升序索引,可以使用以下命令: ```javascript db.users.createIndex({"score": 1}) ``` 单键索引也可以应用于嵌入式文档的某个字段,例如`address.zipcode`: ```javascript db.users.createIndex({"address.zipcode": 1}) ``` 请注意,如果查询不完全匹配索引字段,MongoDB可能无法使用该索引。例如,如果索引是`{"address.zipcode": 1}`,查询`{address.state: "WI"}`将不会使用此索引。 2. 复合索引(CompoundIndexes) 复合索引由两个或更多个字段组成,允许在多个字段上同时优化查询。例如,我们有一个`products`集合,其中包含`userid`、`category`数组和`score`字段,为了优化多条件查询,可以创建一个复合索引: ```javascript db.products.createIndex({"userid": 1, "category": 1, "score": -1}) ``` 这将按照`userid`升序、`category`升序和`score`降序排序数据。复合索引可以有效支持范围查询和排序,但请注意,查询时必须包含索引的第一个字段,才能利用到索引。 3. 多键索引(MultikeyIndexes) 多键索引用于包含数组的字段。当数组中的元素需要被索引时,MongoDB会为数组中的每个元素创建单独的索引条目。例如,如果`scores`字段是一个数组,创建多键索引如下: ```javascript db.students.createIndex({"scores": 1}) ``` 4. 地理空间索引(GeospatialIndexes) 地理空间索引允许基于地理位置的数据查询,如最近地点搜索。可以创建2D索引来处理经纬度坐标,或者2DSphere索引来处理更复杂的球面几何形状: ```javascript // 2D索引 db.places.createIndex({"location": "2d"}) // 2DSphere索引 db.places.createIndex({"location": "2dsphere"}) ``` 5. 全文本索引(FullTextIndexes) 全文本索引用于文本搜索,使我们可以对文档中的文本内容进行搜索: ```javascript db.articles.createIndex({"content": "text"}) ``` 6. 哈希索引(HashedIndexes) 哈希索引适用于分桶查询(bucket queries),它将值哈希到一个固定大小的范围。这对于分片集群尤其有用: ```javascript db.users.createIndex({"hashKey": "hashed"}) ``` 理解并适当地使用这些索引类型是优化MongoDB应用程序性能的关键。根据查询模式和数据结构选择正确的索引类型,可以显著提升查询速度,减少I/O操作,从而提高整体系统性能。在设计索引时,应考虑查询频率、数据分布以及存储成本等因素。

为什么会这样[user_mongo@nosql01 replicaset]$ cd /opt [user_mongo@nosql01 opt]$ ll total 0 drwxr-xr-x. 3 root root 25 Mar 16 17:08 servers drwxr-xr-x. 2 root root 51 Mar 16 17:10 software [user_mongo@nosql01 opt]$ tar -zxvf /opt/software/mongodb-linux-x86_64-rhel70-4.4.12.tgz -C /opt/servers/mongodb_demo/replicaset/ mongodb-linux-x86_64-rhel70-4.4.12/LICENSE-Community.txt tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/LICENSE-Community.txt: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/MPL-2 tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/MPL-2: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/README tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/README: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/THIRD-PARTY-NOTICES tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/THIRD-PARTY-NOTICES: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/install_compass tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/install_compass: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongo tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongo: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongod tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongod: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongos tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongos: Cannot open: No such file or directory tar: Exiting with failure status due to previous errors [user_mongo@nosql01 opt]$ tar -zcvf /opt/software/mongodb-linux-x86_64-rhel70-4.4.12.tgz -C /opt/servers/mongodb_demo/replicaset/ tar: Cowardly refusing to create an empty archive Try `tar --help' or `tar --usage' for more information.

2023-06-01 上传