Mongodb 索引介绍(一)

index作为数据库不可缺少的一部分可以极大加速数据查询,这里记录下Mongodb中的index类型和一些要点。以下内容基于Mongodb 4.0文档. 索引创建 Mongodb支持通过createIndex函数创建索引, 创建时可以指定一些options: background: 默认false, 是否后台创建;默认情况下在建立索引期间,Mongodb为了更快速地构建更有效的索引会阻止所有对集合的读写访问;后台创建索引构建速度较慢,且结构稍不理想,但允许在构建过程中对数据库进行读写 unique: 默认false, 是否唯一;如果唯一,将不能插入或更新与已经存在的文档中索引字段值相同的文档。 name: 索引名称,如不指定Mongodb默认按照索引字段和排序方向生成索引名称 partialFilterExpression: 部分过滤表达式,当指定部分过滤表达式时,Mongodb将只对满足过滤条件的文档字段进行索引。 expireAfterSeconds: 设置TTL index的过期时间 storageEngine: 存储引擎,可以通过这个参数执行存储引擎,4.0版本Mongodb支持两种存储引擎:WiredTiger(默认), 内存存储引擎 除了createIndex外,还可以通过createIndexes批量创建索引。创建示例: db.collection.createIndex( { "user_id": 1} ) 字段的值1表示升序,-1表示降序。 Mongodb index类型 mongodb 有以下几种index类型: 单字段索引(single field index) 过期索引 地理空间索引(Geospatial Index) 哈希索引(hash index) 复合索引(compound index) 多值索引(multikey index) 文本索引(text index) 这里暂时把地理空间索引和文本索引放一边,主要看看复合索引,多值索引和过期索引。 单字段索引 single field index索引中_id index是Mongodb自动创建的一个特殊索引,每个文档都会有一个_id字段,Mongodb会自动对这个字段进行索引。用户可以创建自己的单字段索引,索引顺序无关紧要,因为Mongodb可以从任何排序遍历索引。 过期索引 TTL index是特殊的单字段索引,Mongodb会自动根据TTL设置删除过期的文档,在创建时需要指定一个时间类型字段或一个包含时间类型值的数组字段,然后通过options指定过期时间。例如: db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } ) 这样设置以后,在lastModifiedDate+3600s时间段后Mongodb将会删除这些过期的文档。删除操作是通过Mongodb的后台线程执行的,当TTL 线程启动后可以通过db.currentOp()或数据库profiler查看。 一旦Mongodb在mongodb的主要节点上完成索引创建即会开始执行过期文档的清理,但是TTL index并不能保证过期时间一到,过期的文档会立即被删除,这中间会有一点延时。Mongodb每60秒运行一次后台过期清理任务,但由于清理时长取决于Mongodb的负载,过期的文档可能会存在时间超过60s. 过期索引具有几个限制:...

February 27, 2022 · 2 min · hulb