ใช่ MongoDB สามารถติดตามได้ว่าแต่ละดัชนี (index) ถูกใช้งานในคิวรีกี่ครั้ง โดยใช้ขั้นตอน $indexStats ใน Aggregation Pipeline มาดูตัวอย่าง
สร้างดัชนีและข้อมูลตัวอย่าง
> db.demo508.createIndex({"FirstName": 1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo508.insertOne({"FirstName": "John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e883818987b6e0e9d18f578") }
> db.demo508.insertOne({"FirstName": "Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e88381b987b6e0e9d18f579") }
> db.demo508.insertOne({"FirstName": "David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e88381f987b6e0e9d18f57a") }
แสดงข้อมูล:
> db.demo508.find();
{ "_id" : ObjectId("5e883818987b6e0e9d18f578"), "FirstName" : "John" }
{ "_id" : ObjectId("5e88381b987b6e0e9d18f579"), "FirstName" : "Chris" }
{ "_id" : ObjectId("5e88381f987b6e0e9d18f57a"), "FirstName" : "David" }
คิวรีตรวจสอบสถิติการใช้งานดัชนี
> db.demo508.aggregate([{ $indexStats: { } }]).pretty();
ผลลัพธ์:
{
"name" : "_id_",
"key" : { "_id" : 1 },
"host" : "DESKTOP-QN2RB3H:27017",
"accesses" : {
"ops" : NumberLong(0),
"since" : ISODate("2020-04-04T07:32:27.394Z")
}
}
{
"name" : "FirstName_1",
"key" : { "FirstName" : 1 },
"host" : "DESKTOP-QN2RB3H:27017",
"accesses" : {
"ops" : NumberLong(0),
"since" : ISODate("2020-04-04T07:32:27.527Z")
}
}
การอ่านผลลัพธ์
- name: ชื่อดัชนี (
_id_เป็นดัชนี default,FirstName_1เป็นดัชนีที่สร้างขึ้น) - key: ฟิลด์และทิศทางของดัชนี
- accesses.ops: จำนวนครั้งที่ดัชนีถูกใช้งาน (0 = ยังไม่ถูกใช้)
- accesses.since: เวลาที่เริ่มนับสถิติ
ประโยชน์: ช่วยวิเคราะห์ว่าดัชนีไหนใช้งานจริง ดัชนีไหนไม่เคยถูกใช้ (อาจลบได้เพื่อประหยัดพื้นที่และเพิ่มประสิทธิภาพการเขียน)