MongoDB-index

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

优点:

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"
}
时间: 2024-10-13 00:57:30

MongoDB-index的相关文章

mongodb Index(2)

复合索引 > db.person.drop() true > for(var i=0;i<2000000;i++){< p=""> ... db.person.insert({"name":"meteor"+i%1000,"age":20+i%10}); ... } WriteResult({ "nInserted" : 1 }) > db.person.ensureIn

mongodb Index(3)

全文索引 MongoDB有一个特殊的索引用在文档中搜索文本,之前的博客都是用精确匹配来查询字符串,这些技术有一定的限制.在搜索大块文本的速度非常慢,而且无法处理自然语言礼节的问题.全文本索引使用的是"倒排索引"的思想来做的,和当前非常开源的lucene(全文检索)项目是一样的思想来实现的.使用全文本索引可以非常快的进行文本搜索,MongoDB支持多种语言,可惜在免费版中,并不支持汉语.查MongoDB的官网可以看到,在企业版中安装第三方插件可以支持中文的全文索引. 使用全文本检索需要专

mongodb index 的background 及集群的索引建立

在数据库建立索引时,默认时"foreground" 也就是前台建立索引,但是,当你的数据库数据量很大时,在建立索引的时会读取数据文件,大量的文件读写会阻止其他的操作,此时在建立索引的时候用background:true,虽然,background在可以在后台建立索引. 在后台建立索引的时候,不能对建立索引的collection进行一些坏灭型的操作,如:运行repairDatabase,drop,compat,当你在建立索引的时候运行这些操作的会报错. Building Indexes

MongoDB 使用Index

Index 能够提高查询的性能,如果没有Index,MongoDB必须扫描整个collection,从collection的第一个doc开始,直到最后一个doc,即使第一个doc之后的所有doc都不满足查询条件.如果在Collection上有合适的Index,例如,unique index,那么MongoDB在按照index key查找到一个doc之后,就不会继续对其他doc查询,极大地提高查询性能. MongoDB的 Index 结构跟关系型DB的NonClustered Index相似,都是

MongoDB之TextSearch简介

MongoDB之TextSearch简介  MongoDB支持对文本内容执行文本搜索操作,其提供了索引text index和查询操作$text来完成文本搜索功能.下面我们通过一个简单的例子来体验一下MongoDB提供的全文检索功能. 1.新建blogs collection,并插入如下的document. db.blogs.insert({_id:1,title:"MongoDB text search",content:"this is a simple MongoDB t

Nagios监控mongodb分片集群服务实战

1,监控插件下载 Mongodb插件下载地址为:git clone git://github.com/mzupan/nagios-plugin-mongodb.git,刚开始本人这里没有安装gitpub环境,找网友草根帮忙下载的,之后上传到了csdn资源页面,新的下载地址为:http://download.csdn.net/detail/mchdba/8019077 2,添加新的mongodb监控命令 因为mongodb服务是和mysql从库公用一台物理机,之前已经做了基础nagios以及mys

[Cacti] mongodb性能监控实战

前言: 为了更好的使用mongodb,需要监控出mongodb的一些基础使用情况,比如Flush数.连接数.内存使用率.Index操作,Slave延迟等等,这些可以通过配置cacti监控mongodb的模板来完成.  1,在cacti界面导入模板 在计算机本地,下载此tgz包:http://mysql-cacti-templates.googlecode.com/files/better-cacti-templates-1.1.8.tar.gz 解压到任意目录,然后打开cacti的web界面,选

MongoDB基础教程系列--第七篇 MongoDB 聚合管道

在讲解聚合管道(Aggregation Pipeline)之前,我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最大值.最小值.平均值,求和等操作.聚合操作还能够对记录进行复杂的操作,主要用于数理统计和数据挖掘.在 MongoDB 中,聚合操作的输入是集合中的文档,输出可以是一个文档,也可以是多条文档. MongoDB 提供了非常强大的聚合操作,有三种方式: 聚合管道(Aggregation Pipeline)

mongodb的处理

转自:http://www.cnblogs.com/cswuyg/p/4355948.html 1.count统计结果错误 这是由于分布式集群正在迁移数据,它导致count结果值错误,需要使用aggregate pipeline来得到正确统计结果,例如: db.collection.aggregate([{$group: {_id: null, count: {$sum: 1}}}]) 引用:“On a sharded cluster, count can result in an inaccu

结合MongoDB开发LBS应用

?简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在的项目也正从事相关系统的开发,我们使用的是Symfony2+Doctrine2 ODM+MongoDB的组合. 我们将这些技术要点整理成文,希望能够通过本文的介绍和案例,详细解释如何使用MongoDB进行地理位置信息的查询和处理.在文章的开头,我们也会先介绍一下业界通常用来处理地理位置信息的一些方案并进行比较,让读者逐步了解使用MongoD