8. mongodb优化索引
数据库索引是什么?
索引是一种排序好的便于快速查询的数据结构
作用:帮助数据库高效率的查询数据
索引的优缺点
优点:
提高数据查询的效率,降低数据库的IO成本
通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗
缺点:
占用磁盘空间
大量索引影响SQL语法效率,因为每次插入和修改数据都需要更新索引
创建索引
db.集合名.createIndex(待创建索引的列名 [, 额外选项]);
参数:
待创建索引的列名: { 键: 1, 键: -1, .... }, 1升序 -1降序;例如:{ age: 1} 表示创建age索引并按照升序的方式存储
额外选项:设置索引的名称或者唯一索引名称等等
删除索引
全部删除:db.集合名.dropIndexes();
删除指定:db.集合名.dropIndex(索引名)
查看索引:
db.集合名.getIndexes();
准备数据
use test5
for(var i = 0; i < 100000; i++) {
db.c1.insert({ name: "aaa" + i, age: i})
}
db.c1.count();
练习1: 给name添加普通索引
db.c1.createIndex({ name: 1 })
练习2: 删除name索引,再创建name索引并起名
db.c1.dropIndex("name_1"); // 通过db.c1.getIndexes();查看索引名然后删除
db.c1.createIndex({ name: -1}, { name: "MyName"})
练习3: 创建多个(组合)索引
db.c1.createIndex({ name: 1, age: 1});
练习4: 创建唯一索引
db.c1.createIndex({ name: 1}, { unique: "name"});
作用是不能插入相同的字段值
分析索引
语法: db.集合名.find().explain("executionStats");
COLLSCAN 全表扫描
IXSCAN 索引扫描
FETCH 根据索引去检索指定数据
选择规则
如何选择合适的列创建索引
* 为常做条件、排序、分组的辽段建立索引
* 选择唯一性索引(同值较少如性别字段)
* 选择较小的数据列,为较长的字符串使用前缀索引(索引文件更小)