mongoDB数据库基础 之 索引快速入门

1. 索引的基础知识

在大型数据量下,索引是提高数据库效率的重要手段。一些查询如果没有索引可能会导致全表扫描,降低查询效率。

索引的定义:索引是一种数据结构,对数据库表中一列或多列进行排序,快速查找数据。索引分为聚集索引和非聚集索引。聚集索引定义了物理上的表顺序,不允许重复或 NULL 值,只有主键只能定义一个聚集索引。非聚集索引也称为辅助索引,单独存在于 B 树中,只存储索引列值和指针指向对应数据。

2. 单列索引

2.1 创建单列索引

单列索引是对表中的单独某一列创建索引,可以大大提高该列查询速度。下面是创建单列索引的语法:

db.collection.createIndex( { <field>: <type> } )

其中,<field>是字段名,<type>是索引类型,例如:

db.stu.createIndex( { age: -1 } )

表示为 stu 集合中的 age 字段创建逆序索引。

2.2 删除单列索引

删除单列索引使用 dropIndex 方法,例如:

db.stu.dropIndex( { score: 1 } )

表示删除 stu 集合中 score 字段的顺序索引。

3. 复合索引

复合索引(又称联合索引)是对表中的多列创建索引。复合索引可以优化多字段组合查询的速度,但是对于单个字段的查询效率可能低于单列索引。

3.1 创建复合索引

创建复合索引语法如下:

db.collection.createIndex( { <field1>: <type1>, <field2>: <type2> } )

以 stu 集合为例:

db.stu.createIndex( { name: 1, age: -1 } )

表示为 stu 集合中的 name 字段和 age 字段创建索引,name 字段按照正序排列,age 字段按照逆序排列。

3.2 删除复合索引

删除复合索引同样使用 dropIndex,语法和单列索引一样,例如:

db.stu.dropIndex( { name: 1, age: -1 } )

4. 索引的使用场景

索引的使用场景分为如下两个方面:

4.1 加速排序查询

使用索引可以加速按照索引字段排序的查询,例如:

db.stu.find( { name: 'Tom' } ).sort( { age: 1 } )

使用索引可以优化上述查询,加快查询速度。

4.2 加速范围查询

使用索引还可以加速范围查询,例如:

db.stu.find( { age: { $lt: 20 } } )

使用索引可以加快 age 小于 20 的查询速度。

5. 索引性能问题

索引的设计应该避免以下几个问题:

5.1 过度索引

当索引过多时,索引的增删改操作会变慢,并且占用过多的磁盘空间,影响数据库性能,因此应避免过度索引。

5.2 索引列顺序不当

当查询条件中的字段和索引中字段的顺序不一致时,索引对查询语句的优化会产生影响,应该根据查询条件优化索引字段的顺序。

5.3 慢查询

当查询结果集很大时,查询语句的执行会非常缓慢,这时可以选择使用分段查询或增加合适的复合索引来提高查询速度。

6. 总结

索引是数据库中一个重要的性能优化指标,正确使用索引可以大大提高数据库的查询效率,但是过度索引和不当的索引设计可能会对数据库性能产生负面影响,需要在设计时选择合适的索引方式。

数据库标签