1. 程式人生 > >在MongoDB中建立一個索引而效能提升1000倍的小例子

在MongoDB中建立一個索引而效能提升1000倍的小例子

https://www.cnblogs.com/xuliuzai/p/9965229.html的博文中我們介紹了MongoDB的常見索引的建立語法。部分同學還想看看MongoDB的威力到底有多大,所以,在這兒追加一個例子,感受一下索引的效能。

通過在某一欄位上建立索引,從優化前的執行15.15S到優化後降至0.014S,效能提升了1000倍。

此為實際生產中的一個真實案例,我們有一個集合QQStatements,其資料量為2604W,如下圖所示。

系統需要查詢此表最近的變動情況,即需要抓取新增資料量和修改的資料量。

查詢語句如下:

db.QQStatementsStatements.find({
    $
or: [ {Rec_CreateTime:{$gt: ISODate("2019-01-07 16")}} ,{Rec_ModifyTime:{$gt: ISODate("2019-01-07 16")}} ] } )

但此查詢語句不理想,有時耗時25S,多次執行有快取後也要15S左右,如下圖:

 

檢視此表,發現Rec_CreateTime欄位建有索引,單獨執行符合Rec_CreateTime 條件的語句,很快 0.1 S 內就執行完成。

而Rec_ModifyTime欄位沒有索引,單獨執行符合Rec_ModifyTime條件的語句較慢,需要15S左右。

 

到這兒,就可以判讀出問題是缺失索引,和開發同學確認後,此場景時常用,此欄位需要新增索引。

執行新增索引的命令:

db.QQStatements.createIndex({"Rec_ModifyTime":1},{"name":'idx_Rec_ModifyTime',background:true})

 Rec_ModifyTime欄位新增索引後,整個語句執行降至0.014S(20S-->0.02S )

 

 從上面可以看出在MongoDB資料庫中索引很有必要,效能可以優化數百倍。

 

 本文版權歸作者所有,未經作者同意不得轉載,謝謝配合!!!