µ±ÄãµÚÒ»ÑÛ¿´µ½explainºÍhintµÄʱºò£¬µÚÒ»¸ö·´Ó¦¾ÍÊÇmysqlÖÐËùνµÄÕâÁ½¸ö¹Ø¼ü´Ê£¬È·Êµ¿ÉÒÔ¿´³ö£¬Õâ¸ö¾ÍÊÇÔÚmysqlÖÐ½è¼ø¹ýÀ´µÄ£¬¼ÈÈ»ÊÇ½è¼ø
¹ýÀ´µÄ£¬ÎÒÏë´ó¼Ò¶¼ÖªµÀÕâÁ½¸ö¹Ø¼ü×ÖµÄÓô¦£¬»°²»¶à˵£¬ËÙËÙ¹Û¿´~~~
Ò»£ºexplainÑÝʾ
1. ¹¹½¨Êý¾Ý
ΪÁË·½±ãÑÝʾ£¬ÎÒÐèÒªcreate ten data to inventory£¬¶øÇÒ»¹ÊÇÒªÔÚno index µÄÇé¿öÏ£¬±ÈÈçÏÂÃæÕâÑù£º
1 db.inventory.insertMany([
2 { "_id" : 1, "item" : "f1", type: "food", quantity: 500 },
3 { "_id" : 2, "item" : "f2", type: "food", quantity: 100 },
4 { "_id" : 3, "item" : "p1", type: "paper", quantity: 200 },
5 { "_id" : 4, "item" : "p2", type: "paper", quantity: 150 },
6 { "_id" : 5, "item" : "f3", type: "food", quantity: 300 },
7 { "_id" : 6, "item" : "t1", type: "toys", quantity: 500 },
8 { "_id" : 7, "item" : "a1", type: "apparel", quantity: 250 },
9 { "_id" : 8, "item" : "a2", type: "apparel", quantity: 400 },
10 { "_id" : 9, "item" : "t2", type: "toys", quantity: 50 },
11 { "_id" : 10, "item" : "f4", type: "food", quantity: 75 }]); |

2. ÎÞË÷Òý²éѯ
b.inventory.find(
{ quantity: { $gte: 100, $lte: 200 } }
).explain("executionStats") |

´ÓÉÏͼÖУ¬ÎÒÃÇ¿´µ½ÁËÈý¸öȦȦ£¬ÕâЩ¶¼ÊÇÎÒÃÇÔÚfindÖзdz£ÖØÒªµÄÐÅÏ¢£¬¾ßÌåÐÅÏ¢½âÊÍÈçÏ£º
<1>COLLSCAN
Õâ¸öÊÇʲôÒâË¼ÄØ£¿ Èç¹ûÄã×Ðϸһ¿´£¬Ó¦¸ÃÖªµÀ¾ÍÊÇCollectionScan£¬¾ÍÊÇËùνµÄ¡°¼¯ºÏɨÃ衱£¬¶Ô²»¶Ô£¬¿´µ½¼¯ºÏɨÃèÊDz»ÊǾͿÉÒÔÖ±½Ómapµ½
Êý¾Ý¿âÖеÄtable scan/heap scanÄØ£¿£¿£¿ Êǵģ¬Õâ¸ö¾ÍÊÇËùνµÄÐÔÄÜ×îÀÃ×îÎÞÄεÄÓÉÀ´¡£
<2> nReturned
Õâ¸öºÜ¼òµ¥£¬¾ÍÊÇËùνµÄnumReturned£¬¾ÍÊÇ˵×îºó·µ»ØµÄnum¸öÊý£¬´ÓͼÖпÉÒÔ¿´µ½£¬¾ÍÊÇ×îÖÕ·µ»ØÁËÈýÌõ¡£¡£¡£
<3> docsExamined
ÄÇÕâ¸öÊÇʲôÒâË¼ÄØ£¿£¿¾ÍÊÇdocumentsExamined£¬¼ì²éÁË10¸ödocuments¡£¡£¡£¶ø´Ó·µ»ØÉÏÃæµÄnReturned¡£¡£¡£
ok£¬ÄÇ´ÓÉÏÃæÈý¸öÐÅÏ¢ÖУ¬ÎÒÃÇ¿ÉÒԵóö£¬ÔÀ´ÎÒexamine 10 ÌõÊý¾Ý£¬×îÖղŷµ»Ø3Ìõ£¬ËµÃ÷×öÁË7ÌõÊý¾ÝscanµÄÎÞÓù¦£¬ÄÇôÕâ¸öʱºòÎÊÌâ¾ÍÀ´ÁË£¬
ÈçºÎ¼õÉÙexamineµÄdocuments¡£¡£¡£
ÍêÕûµÄplansÈçÏ£º
3. ʹÓÃsingle field ¼ÓËÙ²éÕÒ
ÖªµÀǰÒòºó¹ûÖ®ºó£¬ÎÒÃǾͿÉÒÔ½øÐÐÕë¶ÔÐԵĽ¨Á¢Ë÷Òý£¬±ÈÈçÔÚquality×Ö¶ÎÖ®ÉÏ£¬ÈçÏ£º
db.inventory.createIndex({ quantity: 1})
db.inventory.find(
{ quantity: { $gte: 100, $lte: 200 } }
).explain("executionStats")
|

ºÃÁË£¬Õâʱºò¾ÍÓÐÒâ˼ÁË£¬µ±ÎÒÃÇÖ´ÐÐÍêcreateindexÖ®ºó£¬ÔÙ´Îexplain£¬4¸öÖØÒªµÄparameters¾ÍƯÏÂÀ´ÁË£º
<1> IXSCAN
Õâ¸öʱºòÔÙÒ²²»ÊÇËùνµÄCOLLSCANÁË£¬¶øÊÇIndexScan£¬Õâ¾Í˵Ã÷ÎÒÃÇÒѾÃüÖÐË÷ÒýÁË¡£
<2> nReturned,totalDocsExamined£¬totalKeysExamined
´ÓͼÖпÉÒÔ¿´µ½Èý¸ö²ÎÊý¶¼ÊÇ3£¬Õâ¾Í˵Ã÷ÎÒÃǵÄmongodb²é¿´ÁË3¸ökey£¬3¸ödocument£¬·µ»Ø3¸öÎĵµ£¬Õâ¸ö¾ÍÊÇËùνµÄ¸ßÐÔÄÜËùÔÚ£¬¶Ô°É¡£
¶þ£ºhintÑÝʾ
˵µ½hint£¬ÎÒÏë´ó¼ÒÒ²ÊÇÖªµÀµÄ£¬ºÜºÃÍæµÄÒ»¸ö¶«Î÷£¬¾ÍÊÇÓÃÀ´force mongodb to excute special index£¬¶Ô°É£¬ÎªÁË·½±ãÑÝʾ£¬ÎÒÃÇ×öÁ½×鸴ºÏË÷
Òý£¬±ÈÈçÕâ´ÎÎÒÃÇÔÚqualityºÍtypeÉϹ¹½¨Ò»Ï£º

buildingÍê³ÉÖ®ºó£¬ÎÒÃǹÊÒâÕâÒ»¸öÕâÑùµÄ²éѯ£¬Õë¶ÔquantityÊÇÒ»¸ö·¶Î§£¬¶øtypeÊÇÒ»¸ö¶¨ÖµµÄÇé¿öÏ£¬ÎÒÃÇforce mongodbȥʹÓÃquantity¿ªÍ·
µÄ¸´ºÏË÷Òý£¬´Ó¶øÇ¿ÖÆmongodb give up ÄǸöÒÔ{type:1,quantity:1}µÄ¸´ºÏË÷Òý£¬ºÜÓÐÒâ˼Ŷ£¬±ÈÈçÏÂͼ£º

´ÓͼÖУ¬¿ÉÒÔ¿´µ½£¬ÎÒÃǼì²éÁË6¸ökeys£¬¶ø´Ó×îÖÕÕÒµ½ÁË2¸öÎĵµ£¬ÏÖÔÚÎÒÃǾÍÖªµÀÁË£¬2ºÍ6Ö®¼ä»¹ÊÇÓв»×ãµÄµØ·½µÈ´ýÎÒÃÇÈ¥ÓÅ»¯ÁË£¬¶Ô°É£¬ÏÂÃæ
ÎÒÃDz»hintÀ´¿´Ò»ÏÂmongodbµÄ×îÓŵÄplanÊÇÔõôÑùµÄ¡£

ÔÙ¿´ÉÏÃæµÄͼ£¬ÄãÓ¦¸ÃÃ÷°×ÁË£¬mongodb¹ûȻִÐÐÁËÄǸö×îÓŵÄplan£¬ÊDz»ÊǺܺÃÍæ£¬ºÃÁË£¬±¾Æª¾Í˵µ½ÕâÀϣÍû¶ÔÄãÓаïÖú~ |