在https://www.cnblogs.com/xuliuzai/p/9965229.html的博文中我們介紹了MongoDB的常見索引的創建語法。部分同學還想看看MongoDB的威力到底有多大,所以,在這兒追加一個例子,感受一下索引的性能。 通過在某一欄位上創建索引,從優化前的執行15.15S到 ...
在https://www.cnblogs.com/xuliuzai/p/9965229.html的博文中我們介紹了MongoDB的常見索引的創建語法。部分同學還想看看MongoDB的威力到底有多大,所以,在這兒追加一個例子,感受一下索引的性能。
通過在某一欄位上創建索引,從優化前的執行15.15S到優化後降至0.013S,性能提升了1000多倍。
此為實際生產中的一個真實案例,我們有一個集合QQStatements,其數據量為2604W,如下圖所示。
系統需要查詢此表最近的變動情況,即需要抓取新增數據量和修改的數據量。
查詢語句如下:
db.QQStatements.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.013S(20S-->0.02S )
從上面可以看出在MongoDB資料庫中索引很有必要,性能可以優化數百倍。
本文版權歸作者所有,未經作者同意不得轉載,謝謝配合!!!