设为首页 收藏本站
查看: 1092|回复: 0

[经验分享] MongoDB-index

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-28 09:25:51 | 显示全部楼层 |阅读模式
索引:特殊的数据结构,存储表的数据的一小部分以实现快速查询
优点:
    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创建索引:
1480239426790709.jpg
查看所有:
1480239458681080.jpg
默认在id上创建了主索引
唯一索引:
db.collection.ensureIndex({"user_id":1},{unique:true})
sparse index:稀疏索引
db.collection.ensureIndex({"user_id":1},{sparse:true})

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

Mongodb索引类型:
    单键索引
    组合索引
    多键索引:
    空间索引
    文本索引
    hash索引
hash索引:
1480239960869078.jpg
删除索引:
1480240057202716.jpg
或者
1480240147968831.jpg
db.mycoll.dropIndexes():删除mycoll的所有索引
查询过程:explain
1480240452127756.jpg
扫描了100个数据
创建索引后,只扫描一个数据
1480240603948396.jpg
指定索引:
1480240943487545.jpg
创建组合索引:
1480241020561713.jpg
通过组合索引查询:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
> 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"
}



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306459-1-1.html 上篇帖子: mongo主库地址变更,从库修改数据源IP 下篇帖子: mongodb3.X 副本集(集群)添加用户名认证
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表