MongoDB相关

覆盖索引

MongoDB的覆盖索引就是:如果查询请求的字段全部包含在索引里面,那么直接从索引上返回结果集,而不需要再去查询具体的文档。覆盖索引可以提高查询效率,但是有一个需要注意的是,记得要去除_id字段,因为_id字段默认是会被查询出来的,这样的话覆盖索引就不起作用了。

稀疏索引

稀疏索引,如果文档中对应字段是null的话,那么这个文档就不会进到索引里面。所以根据稀疏索引进行查询,是查不到那些为null的文档的,这个是和mysql不一样的地方。稀疏索引都和唯一索引搭配使用,因为在MongoDB里面,它的唯一索引实际上会把null值也计算进去,也就是说只能有一个文档是null值,多出来的就无法插入。为了解决这个问题,就可以使用稀疏索引,那些null值不会参与到加入到索引里面。在唯一索引中就不会出现这样的冲突的。

MongoDB索引类型

  • _id索引:MongoDB里面的每个文档都有一个对应的_id字段,默认情况下这个字段就会成为一个索引
  • 复合索引:顾名思义由多个字段组成,复合索引下还有覆盖索引的概念。
  • 全文索引:全文索引不支持中文,它可能会文本进行模糊查询
  • 地理空间索引:2d的地图里面,可以查出距离某个点最近的一些数据

为什么Mongo使用B树作为索引,而Mysql用B+树

主要原因就是Mysql它存储的数据关系更加复杂,并且不可避免要经常作一些两表连接查询,还有就是范围查询,对于范围查询来说,使用B+树是更好的,因为B+树它只在叶子结点存储数据,而非叶子结点只是起到了一种索引的作用,并且叶子结点之间通过双向指针进行连接,所以进行范围查询的时候只需要在叶子结点上进行跳转,而不需要每次都从根节点开始。
Mongo它主要用来处理那些数据关系不太复杂,同时对查询性能要求比较高的情景。所以它的数据关系相对于关系型数据库来说会比较简单,并且大多数都是精准查询而不是范围查询,那此时使用B树,B树的每一个结点都可以存储数据嘛,那一个结点既起到了存储数据的作用,也起到了索引的作用,并且查询的最好时间复杂度是O(1),它的单个查询效率对比B+树来说肯定是会更高一点的。

什么时候用MongoDB,什么时候用Mysql

1.MongoDB它是非关系型数据库,key-value的形式进行存储,所以在一些对象关系不是特别复杂,并且对查询效率比要求较高的场景下更为适合。但是虽然有这些优点,对于范围查询来说,它的表现是不如Mysq的,因为Mysql使用B+树作索引,而Mongo使用B树作索引。还有就是在事务角度,Mongo是没有事务机制,所以说对于一些数据正确性安全性要求较高的话,就不适合用mongo,比如说像银行业务,计费业务
2.Mongo它的横向扩展能力更强,一个集合里面,文档与文档之间的字段没有严格的规范,就是说我完全可以插入一个新的文档,然后里面有一些新的字段,这是mysql做不到的
3.特定业务下,Mongo有地理索引的机制,2d的地图上,可以找到离某个点最近的一些数据,那么在一些业务比如说“附近的餐馆”,“100米内的景点”这些业务可以使用Mongo。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值