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创建索引:

图片.png

 查看所有:

图片.png

默认在id上创建了主索引

唯一索引:

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

sparse index:稀疏索引

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

Mongodb:

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

Mongodb索引类型:

    单键索引

    组合索引

    多键索引:

    空间索引

    文本索引

    hash索引

hash索引:
图片.png

删除索引:

图片.png

或者

图片.png

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

查询过程:explain

图片.png

扫描了100个数据

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

图片.png

指定索引:

图片.png

创建组合索引:

图片.png

通过组合索引查询:

> 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"
}

原创文章,作者:黑白子,如若转载,请注明出处:http://www.178linux.com/61034

(0)
上一篇 2016-11-27 16:25
下一篇 2016-11-27 18:51

相关推荐

  • LVS DR模式

    一、测试环境说明 操作系统:CentOS6.7-X64 IP_VS版本:1.2.26 DR:10.10.10.130 VIP:10.10.10.140 RS1:10.10.10.131 RS2:10.10.10.132 二、LVS-DR模式原理 a)客户端发送一个请求(源地址为CIP,目标地址为VIP,我们简称为CIP:VIP)到LVS的DR b)通过在调度…

    Linux干货 2016-09-19
  • vim简单总结

    编辑器种类 常用的文本编辑器有: 行编辑器,如sed,awk,cut等 全屏编辑器,如vi,vim(vi增强版),nano等 vim的模式 命令模式:使用vim filename打开文件后,进入的第一个模式。 直接使用键盘操作文本的编辑 插入模式:INSERT模式 进入:i,从当前光标处开始 进入:I,从当前行行首开始 末行模式:vim内置命令接口。 以:开…

    Linux干货 2016-08-18
  • 编译安装nginx并实现反向代理负载均衡和缓存功能

    一、编译安装nginx 1、下载 [root@ns1 ~]# wget http://nginx.org/download/nginx-1.10.0.tar.gz 2、解压 [root@ns1 ~]# tar xf nginx-1.10.0.tar.gz [root@ns1 ~]…

    Linux干货 2016-05-25
  • linux用户权限管理

    用户: 管理员–root= 0 普通用户–(1-65535) 系统用户–(1-499),(1-999) 登录用户–(500+),(1000+) 用户和组的配置文件位置: /etc/passwd– 存储系统用户所有信息 /etc/group– 存储用户组的所有信息 /etc/shadow&…

    2017-04-02
  • sed讲解与使用

            sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理…

    Linux干货 2016-08-15
  • nginx负载均衡搭建

    组 网络拓扑图 nginx负载均衡服务器搭建 首先准备三台机器 主机A(nginx负载均衡器) 主机B 主机C 主机A需两块网卡(一块外网,一块内网) 主机B和主机C各一块 (各一块内网的IP,如果主机B C和主机A内网网卡在一个网段就不需要配置网关地址了。 规划好网络后,nginx负载主机分别ping下各rs主机是否可通 主机A打开核心转发功能 #echo…

    Linux干货 2017-05-17