MongoDB数据库index索引的用法和作用

索引最大的作用就是提高query的查询性能,如果没有索引,mongodb需要scan整个collection的所有的documents,并筛选符合条件的document,如果有索引,那么query只需要遍历index中有限个索引条目即可,况且index中的条目是排序的,这对“order  by”操作也非常有利。

索引:特殊的数据结构,存储表的数据的一小部分以实现快速查询

优点:

1、大大减少了服务器需要扫描的数据量

2、索引可以帮助服务器避免排序或使用临时表

3、索引可以将随机io转换为顺序io

索引评估:三星(非常好)

一星:索引如果能将相关的记录放置到一起

二星:索引中数据的存储顺序与查找标准中顺序一致

三星:如果索引中包含查询中所需要的全部数据:(覆盖索引)

DBA书:关系型数据库索引设计与优化

索引类别:

顺序索引

散列索引:将索引映射至散列桶上,映射是通过散列函数进行的

评估索引的标准:

访问类型:做等值比较用散列索引,用范围比较时用顺序索引

访问时间:

插入时长:

删除时长:

空间开销:

顺序索引:

聚集索引:如果某记录文件中的记录顺序是按照对应的搜索码指定的顺序排序,聚集索引页成为主索引

非聚集索引:搜索码中的指定的次序与记录文件中的记录次序不一致

有聚集索引的数据文件,也叫做索引顺序文件

根据索引中是否为每个记录相应的创建索引项,可分为稠密索引和稀疏索引

多级索引:(但对频繁修改的数据,性能很差)

辅助索引必须是稠密索引

B+树索引:顺序索引

Balance Tree:平衡树索引

顺序索引的特性:

全值匹配:Name='user12'

匹配最左前缀:Name LIKE  'User1%',无效:Name LIKE '%User1%'

匹配列前缀:Name LIKE  'User1%',无效:Name LIKE '%User1%'

匹配范围值

精确匹配某一列并范围匹配另外一列:

只访问索引的查询

散列索引:

散列函数:

分布随机

分布均匀

适用场景:

精确匹配:=,IN(),<=>

Mysql:全文索引,fulltext

sphinx,lucene

空间索引:必须使用空间索引函数获取相应的查询结果

主键、唯一键

Mysql:创建索引

create index index_name on table (col1,…)  
alter table add index  
alter table drop index  
drop index index_name from table  
show indexes from table

Mongodb创建索引:

id字段就有主索引

在Name创建索引:

查看所有:

默认在id上创建了主索引

唯一索引:

db.collection.ensureIndex({"user_id":1},{unique:true})

sparse index:稀疏索引

db.collection.ensureIndex({"user_id":1},{sparse:true})

Mongodb:

索引可以创建在collection上,也可以创建在子文档中

Mongodb索引类型:

单键索引

组合索引

多键索引:

空间索引

文本索引

hash索引

hash索引:

删除索引:

或者

db.mycoll.dropIndexes():删除mycoll的所有索引

查询过程:explain

扫描了100个数据

创建索引后,只扫描一个数据

指定索引:

创建组合索引:

通过组合索引查询:

> db.testcoll.find({Name:'User19'}).hint({Name:1,Age:1}).explain() 
{  
"cursor" : "BtreeCursor Name_1_Age_1",  
"isMultiKey" : false,  "n" : 1, 
"nscannedObjects" : 1, 
"nscanned" : 1,  
"nscannedObjectsAllPlans" : 1,  
"nscannedAllPlans" : 1,  
"scanAndOrder" : false,  
"indexOnly" : false,  
"nYields" : 0,  
"nChunkSkips" : 0,  
"millis" : 0,  
"indexBounds" : 
{   
"Name" : 
[   
[     
"User19",    
"User19"    
]  
],   
"Age" : 
[    
[     
{      
"$minElement" : 1     
},     
{      
"$maxElement" : 1     
}    
]   
]  
},  
"server" : "stu:27017"
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 数据
, 函数
, 排序
, 索引
评估
数据库索引用法、数据库索引的用法、数据库中索引的用法、mongodb 删除数据库、mongodb 创建数据库,以便于您获取更多的相关知识。

时间: 2024-07-31 04:26:06

MongoDB数据库index索引的用法和作用的相关文章

MongoDB数据库中索引(index)详解_MongoDB

索引:特殊的数据结构,存储表的数据的一小部分以实现快速查询 优点: 1.大大减少了服务器需要扫描的数据量 2.索引可以帮助服务器避免排序或使用临时表 3.索引可以将随机io转换为顺序io 索引评估:三星(非常好) 一星:索引如果能将相关的记录放置到一起 二星:索引中数据的存储顺序与查找标准中顺序一致 三星:如果索引中包含查询中所需要的全部数据:(覆盖索引) DBA书:关系型数据库索引设计与优化 索引类别: 顺序索引 散列索引:将索引映射至散列桶上,映射是通过散列函数进行的 评估索引的标准: 访问

MongoDB · 特性分析 · 索引原理

为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql). mongo-9552:PRIMARY> db.person.find() { "_id" : ObjectId("571b5da31b0d530a03b3ce82"), "name" : "jack", "age" :

MongoDB教程之索引介绍_MongoDB

一.索引基础:     MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:   复制代码 代码如下:     > db.test.ensureIndex({"username":1})       可以通过下面的名称查看索引是否已经成功建立:   复制代码 代码如下:     > db.test.getIndexes()       删除索引的命令是:   复制代码 代码如下:     > db.test.dr

Mongodb数据库安装及使用

介绍:     MongoDB是一个基于分布式文件存储的数据库.高性能,开源,无模式的文档型数据库,为WEB应用提供可扩展的高性能数据存储,是当前NoSql数据库中比较热门的一种,由C++语言编写.     MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现

MongoDB数据库高可用和分区解决方案

MongoDB是当前比较流行的文档型数据库,其拥有易使用.易扩展.功能丰富.性能卓越等特性.MongoDB本身就拥有高可用及分区的解决方案,分别为副本集(Replica Set)和分片(sharding),下面我们主要看这两个特性.   1.副本集   有人说MongoDB副本集至少需要三个节点,但其实这句是有问题的,因为副本集中节点最少可以是一台,3.0之前最多12个节点,3.0开始节点数量能够达到50个.但节点数1个或者2个的时候,MongoDB就无法发挥副本集特有的优势,因此我们一般建议节

mysql数据库中索引查看建立删除的sql语句

本文介绍如何用sql语句建立.查看.删除mysql表索引. 1.查看哪些表增加了索引sql语句  代码如下 复制代码 mysql> show index from tblname; mysql> show keys from tblname; 比如执行"show index from v9_danji"这条sql语句,查看v9_danji这张表建立了哪些索引,会出来如下结果,可以看到索引的名称和索引的类型等. 查看表索引sql 2.给表某个字段添加索引sql语句    代码

MongoDB数据库forEach循环遍历用法_MongoDB

MongoDB数据库forEach语句循环遍历功能是非常常用的一个功能. 采用foreach循环遍历,并每次循环允许执行一次回调函数. 此外,foreach循环遍历是for循环的一种扩展,对比同浏览器端的forEach用法是一致的. 示例如下: >var arr = ["ab","cd","ef"] >var show = function(value,index,ar){ print(value) } >arr.forEach

PHP实现的MongoDB数据库操作类分享_php实例

class HMongodb { private $mongo; //Mongodb连接 private $curr_db_name; private $curr_table_name; private $error; public function getInstance($mongo_server, $flag=array()) { static $mongodb_arr; if (empty($flag['tag'])) { $flag['tag'] = 'default'; } if (

mongodb数据库复制集随机同步数据

记一次MongoDB主从切换,重新同步数据. PRIMARY> rs.conf() { "_id" : "poptask", "version" : 4, "members" : [ { "_id" : 0, "host" : "10.0.0.105:20011" }, { "_id" : 1, "host" : &quo