IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mongodb索引(二) -> 正文阅读

[大数据]Mongodb索引(二)

索引类型

文档数据

db.bill.insert([
{
    "billId":"1001",
    "amount":600,
    "address":"广东省深圳市",
    "date":"2021-10-14",
    "payWay":"微信支付",
    "sku":{"name":"可口可乐","num":2,"price":300}
},
{
    "billId":"1001",
    "amount":900,
    "address":"广东省深圳市",
    "date":"2021-10-14",
    "payWay":"微信支付",
    "sku":{"name":"可口可乐","num":3,"price":300}
},
{
    "billId":"1001",
    "amount":1200,
    "address":"广东省深圳市",
    "date":"2021-10-14",
    "payWay":"微信支付",
    "sku":{"name":"可口可乐","num":4,"price":300}
}
,
{
    "billId":"1001",
    "amount":1500,
    "address":"广东省深圳市",
    "date":"2021-10-14",
    "payWay":"微信支付",
    "sku":{"name":"可口可乐","num":5,"price":300}
}
])

单字段索引?

单个字段上创建索引

db.bill.createIndex( { amount: 1 } )

嵌入式字段创建索引

db.bill.createIndex( { "sku.name": 1 } )

内嵌文档上创建索引

db.bill.createIndex( { sku: 1 } )

复合索引

db.bill.createIndex( { "amount": 1, "address": 1 } )

同时复合索引和Mysql一样支持最左匹配原则

哈希索引

db.bill.createIndex( { address: "hashed" } )

将address的值进行hash计算后作为索引,定值查找速度快,但不适合范围查找和排序。

部分索引

db.bill.createIndex(
   {  address: 1 },
   { partialFilterExpression: { amount: { $gt: 600 } } }
)

部分并不支持所谓的最左匹配原则:如下查询将不会使用索引

db.bill.find({address:"广东省深圳市"})

mongodb和mysql一样提供了explain()函数来查看执行计划,如下图。?

? ? ?若想强制使用这里创建的部分索引可以利用hint()函数使用如下语句:

db.bill.find({address:"广东省深圳市"}).hint( {  address: 1 },
   { partialFilterExpression: { amount: { $gt: 600 } } } )

但是这样返回的结果将不完整,只返回了符合索引项的数据。?

同时,本次查询使用了索引?

?

?补充

? ? ? ? 创建索引的时候指定索引名称,hint()函数支持 hint("索引名称")强制使用该索引

? ? ? ? hint()函数可以声明$natural参数,避免MongoDB在查询过程中使用任何索引

? ? ? ? 测试:创建单字段索引:db.bill.creatIndex({amount:1})

? ? ? ? 普通查询:db.bill.find({amount:{$gt:600}}).explain()

强制不使用索引 :db.bill.find({amount:{$gt:600}}).hint({$natural:1}).explain()

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:51:47  更:2021-10-15 11:52:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:22:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码