1.目的

select
distinct diary.userid ,
a.name,
sum(case when diary>=1 then 1 else 0 end) as ‘写日志’ 
from diary  inner join a on a.id=diary.userid
group by diary.userid,a.id,a.name

目录正是用来加速查询的。数据库索引与书籍的目录类似:有了目录就不要求翻遍整本书,数据库则能够直接在目录中搜寻,使得搜索速度能坚实多少个数据级。在目录中找到条目今后,就足以平素跳转到目的文书档案的职务。

表明:当你的diary大于1时,也设为一,假使未有写,那么为0
,那样用sum实行集中也就求出了结果。

 

ID 姓名    日志数

二.创办普通索引

1 zzl        2
2 zql        2
3 zzd        1
4 gy         4

选拔命令 db.collection.ensureIndex({key:一})

 

3.查看关于索引的有关音信

使用命令 db.collection.stats()

 

四.查看查询利用索引的情状

行职分令 db.collection.find({key:value}).explain()

explain是相当实用的工具,会推抢你拿走查询方面许多实惠的消息。只要对游标调用该格局,就能够赢得查询细节。explain会再次来到三个文书档案,而不是游标本人。如:

> db.test.find().explain()
 {        
      "cursor" : "BasicCursor",    
      "nscanned" : 1,  
      "nscannedObjects" : 1,
      "n" : 1,     
      "millis" : 0,      
      "nYields" : 0,     
      "nChunkSkips" : 0,       
     "isMultiKey" : false,    
      "indexOnly" : false,      
     "indexBounds" : {        }    
  }

explain会再次来到查询利用的目录景况,耗费时间和扫描文书档案数的总计音讯。  
 “cursor”:”BasicCursor”表示并未有运用索引。  
 “nscanned”:一 象征查询了略微个文书档案。  
 “n”:一 意味回去的文书档案数量。    
 “millis”:0 表示一切查询的耗费时间。

 

 

五.删除索引

使用命令 db.collection.dropIndex({key:壹})

注:删除集合也会将汇集中的索引全部删减

 

陆.创造唯一索引

选用命令 db.collection.ensureIndex({key:1}