在上一篇「」文章中,我們介紹了 MongoDB 中的索引 Index,也介紹了單一欄位的索引。今天接著來介紹使用索引的優點及缺點。
如果我們同樣使用上一篇的範例資料來查詢 2017 年之後的電影:db.demo.explain("executionStats").find({year: {$gt: 2017}})
可以發現其 "executionTimeMillisEstimate" 為 0,那是因為查詢的結果佔整個 document 的數量比例很低(236 / 28795)
建立索引對於查詢效率提升的因素有以下兩項:
因此,如果我們查詢 2017 之前的電影:db.demo.explain("executionStats").find({year: {$lt: 2017}})
可以觀察以下兩項資料:
相較於查詢 2017 年之後的電影,我們查詢 2017 之前的電影的查詢效率變慢許多,甚至比沒有建立索引時的查詢效率還要來得慢。
如果沒有建立索引時的查詢效率為何?我們先把剛才建立的索引刪掉:db.demo.dropIndex({year: 1})
接著來檢視詳細的查詢資料: db.demo.explain("executionStats").find({year: {$lt: 2017}})
可以發現查詢效率反而比建立索引後的查詢效率還差。而造成查詢效率變慢是因為查詢結果的數量太多:需要先查 index,再去掃 index。
在一些情況下,建立索引可以提升查詢的效率,而索引也可以提升排序的效率。
我們對 title 欄位進行排序:db.demo.explain("executionStats").find({}).sort({title: 1})
觀察以下資訊:
我們對 title 建立索引:db.demo.createIndex({title: 1})
接著再去檢視詳細的查詢資料:db.demo.explain("executionStats").find({}).sort({title: 1})
觀察以下資料:
可以發現,在建立索引之後,排序的效率提升。
今天的文章說明了使用索引反而可能會讓查詢的效率變慢,但使用索引會讓排序的效率提升。
您好,關於排序的部分,雖然可以增加排序效率,但如果建立index的時候是-1建立,是否就會讓排序反而比沒建立index時更慢。