![[重点]mongodb索引核心数据结构B+树 1.B+树可视化 2.索引(唯一索引、组合索引、覆盖索引避免回表(这就是为啥不用select *)) 3.执行计划查询是否索引生效](http://pic.xiahunao.cn/yaotu/[重点]mongodb索引核心数据结构B+树 1.B+树可视化 2.索引(唯一索引、组合索引、覆盖索引避免回表(这就是为啥不用select *)) 3.执行计划查询是否索引生效)
1)B树的结构(为了范围搜索且数据只存叶子节点叶子节点之间有链表 )并且有指针适合范围查询.2)可视化思考:Data Structure Visualization3) B Tree Visualization只有叶子节点存储数据其它节点存的是索引。范围查询。降低树的深度。有指针。有一定的数据冗余。4)B树则是:5)1.查看当前文档的索引 2.查看某个语句执行计划 3.查看是否是命中索引还是全表扫描6)创建索引7)再查询发现就多一个索引了及其索引的名字8)再次查询可以看出命中索引了9)查看索引大小10)删除索引11)单键索引对单一的字段建立索引内嵌文档索引 // 比如查询书作者查看下内嵌文档索引执行计划12)复合索引案例: 作者 书籍名 // 先对作者排序再对不同书籍排序其中1相当于作者2则是书籍名其中书籍名在作者的下面进行排序。设计复合索引的时候一定要注意把哪个字段放前面一点。比如上述则是:userid为升序在userid相同的情况下score降序排创建复合索引并且查看当前文档所有的索引13)多键索引 // 针对数组的属性。但是只允许对一个数组不可以多个例子:查询例子查询itemaaa, 且 ratings等于5的 或者 范围的14)地理空间索引 // 如100公里内的人好友商家信息这样子就查询出了兰州牛肉面的数据。15)全文索引 // 简易分词倒排索引 比如先找coffee,先找到1和3这2个文档的然后再找到具体文档内容。 英文分词简单有空格来搞但是中文分词麻烦mongodb偏偏不支持中文分词例子先插入数据创建索引查询下索引尝试下查看索引使用情况:16)hash索引 // 不用传统的B-Tree索引不支持排序不支持范围使用例子查询手机号查询名字。17)通配符索引 // 动态变化的文档不同商品的属性是不一样。查看索引测试查看执行计划18)索引属性唯一索引 // 防止重复插入再插入就报错:复合索引情况多键索引情况 // 数组插入1也不行为空的情况 // 已经有一个没有x也就是为null了再插入必须含有x才行部分索引 // 加了过滤条件后对剩余的数据进行索引理解满足指定条件后可以使用索引。创建索引:测试稀疏索引 // 其实也是部分数据建立索引。 也就是:保证数据完整性则不能用稀疏索引例子:TTL索引 // 不再需要自己写定时器删除不重要数据了(日期字段且是单键)19)索引使用建议20)查询计划注意: