首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

MongoDB 索引操作實戰:建立、複合、唯一、刪除索引與 explain 效能分析

     編輯:DB2 教學

測試資料準備

for (var i=0; i<100000; i++) {
  var index=parseInt(i*Math.random());
  db.person.insert({"name":"jessonlv"+i, "age":i});
}

無索引全表掃描

db.person.find({"name":"jessonlv10000"}).explain()

結果:cursor: "BasicCursor" (表掃描),nscanned: 100000,millis: 66。

建立單欄索引後

db.person.ensureIndex({"name":1})
db.person.find({"name":"jessonlv10000"}).explain()

結果:cursor: "BtreeCursor name_1",nscanned: 1,millis: 0 (極速)。

索引類型與操作

類型指令說明
單欄db.coll.ensureIndex({"field":1})1=升序, -1=降序
唯一db.coll.ensureIndex({"name":1}, {"unique":true})重複鍵值拒絕寫入
複合db.coll.ensureIndex({"name":1, "birthday":1})欄位順序影響查詢匹配
查看索引db.coll.getIndexes()
刪除指定db.coll.dropIndex("name_1")
刪除全部db.coll.dropIndexes()

複合索引查詢優化器行為

建立 {name:1, birthday:1} 與 {birthday:1, name:1} 兩個索引。查詢 {birthday:"1986-5-4", name:"jes"} 時,優化器自動選擇最佳索引 (掃描文件數最少者)。

強制指定索引

db.person.find({"birthday":"1986-5-4", "name":"jes"}).hint({"birthday":1, "name":1})

背景建立索引 (不阻塞寫入)

db.coll.ensureIndex({"field":1}, {"background":true})

總結

  • 索引能將查詢從毫秒級降至微秒級。
  • 複合索引順序應符合查詢謂詞順序 (等值優先、範圍次之)。
  • 生產環境務必加 background:true 避免長時間鎖表。
  • 定期 getIndexes() 檢視並移除未使用索引以減少寫入開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved