服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - MongoDB数据库中索引(index)详解

MongoDB数据库中索引(index)详解

2020-05-09 16:16运维部落 MongoDB

本文给大家详细介绍了MongoDB数据库中的索引的知识,优缺点以及使用技巧等方面,非常细致,有需要的小伙伴可以参考下

索引:特殊的数据结构,存储表的数据的一小部分以实现快速查询

优点:

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

?
1
2
3
4
5
6
7
8
9
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创建索引:

MongoDB数据库中索引(index)详解

查看所有:

MongoDB数据库中索引(index)详解

默认在id上创建了主索引

唯一索引:

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

sparse index:稀疏索引

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

Mongodb:

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

Mongodb索引类型:

单键索引

组合索引

多键索引:

空间索引

文本索引

hash索引

hash索引:

MongoDB数据库中索引(index)详解

删除索引:

MongoDB数据库中索引(index)详解

或者

MongoDB数据库中索引(index)详解

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

查询过程:explain

MongoDB数据库中索引(index)详解

扫描了100个数据

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

MongoDB数据库中索引(index)详解

指定索引:

MongoDB数据库中索引(index)详解

创建组合索引:

MongoDB数据库中索引(index)详解

通过组合索引查询:

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

 

延伸 · 阅读

精彩推荐
  • MongoDBMongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者...

    w田翔3872020-12-19
  • MongoDBMongodb索引的优化

    Mongodb索引的优化

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感...

    MRR3252020-05-05
  • MongoDBMongoDB的索引

    MongoDB的索引

    数据库中的索引就是用来提高查询操作的性能,但是会影响插入、更新和删除的效率,因为数据库不仅要执行这些操作,还要负责索引的更新 ...

    MongoDB教程网2532020-05-12
  • MongoDB在mac系统下安装与配置mongoDB数据库

    在mac系统下安装与配置mongoDB数据库

    这篇文章主要介绍了在mac系统下安装与配置mongoDB数据库的操作步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    CXYhh1219312021-11-14
  • MongoDBMongoDB多条件模糊查询示例代码

    MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值...

    浅夏晴空5902020-05-25
  • MongoDBWindows下MongoDB配置用户权限实例

    Windows下MongoDB配置用户权限实例

    这篇文章主要介绍了Windows下MongoDB配置用户权限实例,本文实现需要输入用户名、密码才可以访问MongoDB数据库,需要的朋友可以参考下 ...

    MongoDB教程网3082020-04-29
  • MongoDBmongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参...

    ZJW02155642020-05-22
  • MongoDBMongoDB系列教程(五):mongo语法和mysql语法对比学习

    MongoDB系列教程(五):mongo语法和mysql语法对比学习

    这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命...

    MongoDB教程网3252020-05-01