国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MongoDB學習筆記(六) MongoDB索引用法和效率分析

數據庫 其他數據庫 MongoDB
MongoDB中的索引其實類似于關系型數據庫,都是為了提高查詢和排序的效率的,并且實現原理也基本一致。由于集合中的鍵(字段)可以是普通數據類型,也可以是子文檔。MongoDB可以在各種類型的鍵上創建索引。

MongoDB中的索引其實類似于關系型數據庫,都是為了提高查詢和排序的效率的,并且實現原理也基本一致。由于集合中的鍵(字段)可以是普通數據類型,也可以是子文檔。MongoDB可以在各種類型的鍵上創建索引。下面分別講解各種類型的索引的創建,查詢,以及索引的維護等。

一、創建索引

1. 默認索引

MongoDB有個默認的“_id”的鍵,他相當于“主鍵”的角色。集合創建后系統會自動創建一個索引在“_id”鍵上,它是默認索引,索引名叫“_id_”,是無法被刪除的。我們可以通過以下方式查看:

  1. var _idIndex = mongoCollection.Metadata.Indexes.Single(x => x.Key == "_id_");    
  2. Console.WriteLine(_idIndex);   

2. 單列索引

在單個鍵上創建的索引就是單列索引,例如我們要在“UserInfo”集合上給“UserName”鍵創建一個單列索引,語法如下:(1表示正序,-1逆序)

  1. mongoCollection.Metadata.CreateIndex(new Document { { "UserName"1 } }, false);  

接著,我們用同樣方法查找名為“_UserName_”的索引

  1. var _UserName_Index = mongoCollection.Metadata.Indexes.Single(x => x.Key == "_UserName_");    
  2. Console.WriteLine(_UserName_Index);  

3.組合索引

另外,我們還可以同時對多個鍵創建組合索引。如下代碼創建了按照“UserId”正序,“UserName”逆序的組合索引:

  1. mongoCollection.Metadata.CreateIndex(new Document { { "UserId"1 }, { "UserName", -1 } }, false);  

4.子文檔索引

我們可以對文檔類型的鍵創建各種索引,例如單列索引,如下創建用戶詳細信息“Detail”的單列索引:

  1. mongoCollection.Metadata.CreateIndex(new Document { { "Detail"1 } }, false);  

對子文檔的鍵創建組合索引:例如在“Detail.Address”和“Detail.Age”上創建組合索引:

  1. mongoCollection.Metadata.CreateIndex(new Document { { "Detail.Address"1 }, { "Detail.Age", -1 } }, false);  

5.唯一索引

唯一索引限制了對當前鍵添加值時,不能添加重復的信息。值得注意的是,當文檔不存在指定鍵時,會被認為鍵值是“null”,所以“null”也會被認為是重復的,所以一般被作為唯一索引的鍵,***都要有鍵值對。

對“UserId”創建唯一索引(這時候***一個參數為“true”):

  1. mongoCollection.Metadata.CreateIndex(new Document { { "UserId"1 } }, true);  

#p#

二、維護索引

1. 查詢索引

通過索引名查詢的方式已有介紹。但有時候,我們可能忘記了索引名,怎么查詢呢?

下面提供一個遍歷全部索引的方法,打印全部索引信息:

  1. foreach (var index in mongoCollection.Metadata.Indexes)    
  2.  {    
  3.      Console.WriteLine(index.Value);    
  4.  }  

輸出結果示例:

  1. "name""_id_""ns""myDatabase.UserInfo""key": { "_id"1 } }    
  2. "name""_UserId_unique_""ns""myDatabase.UserInfo""key": { "UserId"1 }, "unique"true"_id""4d8f406ab8a4730b78000005" }    
  3. "name""_UserName_""ns""myDatabase.UserInfo""key": { "UserName"1 }, "unique"false"_id""4d8f406ab8a4730b78000006" }    
  4. "name""_Detail.Address_Detail.Age_""ns""myDatabase.UserInfo""key": { "Detail.Address"1"Detail.Age": -1 }, "unique"false"_id""4d8f406ab8a4730b78000007" }    
  5. "name""_UserId_UserName_""ns""myDatabase.UserInfo""key": { "UserId"1"UserName": -1 }, "unique"false"_id""4d8f406ab8a4730b78000008" }    
  6. "name""_Detail_""ns""myDatabase.UserInfo""key": { "Detail"1 }, "unique"false"_id""4d8f406ab8a4730b78000009" }  

可見,集合的索引也是通過一個集合來維護的。name表示索引名,ns表示索引屬于哪個庫哪個集合,key表示索引在哪個鍵上,正序還是逆序,unique表示是否為唯一索引,等等...

2. 刪除索引

新手常陷入的誤區是,認為集合被刪除,索引就不存在了。關系型數據庫中,表被刪除了,索引也不會存在。在MongoDB中不存在刪除集合的說法,就算集合數據清空,索引都是還在的,要移除索引還需要手工刪除。

例如,刪除名為“_UserName_”的索引:

  1. mongoCollection.Metadata.DropIndex("_UserName_");  

下面提供刪除除默認索引外其他全部索引的方法:

  1. public void DropAllIndex()    
  2. {    
  3.     var listIndexes = mongoCollection.Metadata.Indexes.ToList();    
  4.     for (int i = 0; i < listIndexes.Count; i++)    
  5.     {    
  6.         if (listIndexes[i].Key != "_id_")    
  7.         {    
  8.             mongoCollection.Metadata.DropIndex(listIndexes[i].Key);    
  9.         }    
  10.     }    
  11. }  

#p#

三、索引的效率

MongoDB的索引到底能不能提高查詢效率呢?我們在這里通過一個例子來測試。比較同樣的數據在無索引和有索引的情況下的查詢速度。

首先,我們通過這樣一個方法插入10W條數據:

  1. public void InsertBigData()    
  2. {    
  3.     var random = new Random();    
  4.     for (int i = 1; i < 100000; i++)    
  5.     {    
  6.         Document doc = new Document();    
  7.         doc["ID"] = i;    
  8.         doc["Data"] = "data" + random.Next(100000);    
  9.         mongoCollection.Save(doc);    
  10.     }    
  11.     Console.WriteLine("當前有" + mongoCollection.FindAll().Documents.Count() + "條數據");    
  12. }  

然后,實現一個方法用來創建索引:

  1. public void CreateIndexForData()    
  2. {    
  3.     mongoCollection.Metadata.CreateIndex(new Document { { "Data"1 } }, false);    
  4. }  

還有排序的方法:

  1. public void SortForData()    
  2. {    
  3.     mongoCollection.FindAll().Sort(new Document { { "Data"1 } });    
  4. }  

運行測試代碼如下:

  1. static void Main(string[] args)    
  2. {    
  3.     IndexBLL indexBll = new IndexBLL();    
  4.     indexBll.DropAllIndex();    
  5.     indexBll.DeleteAll();    
  6.     indexBll.InsertBigData();    
  7.     Stopwatch watch1 = new Stopwatch();    
  8.     watch1.Start();    
  9.     for (int i = 0; i < 1; i++) indexBll.SortForData();    
  10.     Console.WriteLine("無索引排序執行時間:" + watch1.Elapsed);    
  11.     indexBll.CreateIndexForData();    
  12.     Stopwatch watch2 = new Stopwatch();    
  13.     watch2.Start();    
  14.     for (int i = 0; i < 1; i++) indexBll.SortForData();    
  15.     Console.WriteLine("有索引排序執行時間:" + watch2.Elapsed);    
  16. }  

***執行程序查看結果:

多次測試表明在有索引的情況下,查詢效率要高于無索引的效率。

原文鏈接:http://www.cnblogs.com/lipan/archive/2011/03/28/1997202.html 

【編輯推薦】

  1. MongoDB學習筆記(一) MongoDB介紹及安裝
  2. MongoDB學習筆記(二) 通過samus驅動實現基本數據操作
  3. MongoDB學習筆記(三) 在MVC模式下通過Jqgrid表格操作MongoDB數據
  4. MongoDB學習筆記(四) 用MongoDB的文檔結構描述數據關系
  5. MongoDB學習筆記(五) MongoDB文件存取操作
責任編輯:艾婧 來源: 博客園
相關推薦

2011-09-14 15:30:00

MongoDB

2011-03-21 13:28:14

MongoDB文件存取

2011-03-08 10:27:25

MongoDB介紹安裝

2011-03-17 09:06:34

MongoDB文檔結構

2013-11-19 10:08:06

MongoDB

2024-04-18 10:48:24

MongoDB

2021-12-01 10:18:08

MongoDBMySQL數據庫

2011-03-11 09:16:12

MVCJqgrid

2011-02-23 11:18:48

MongoDBMySQL性能測試

2011-05-26 10:05:48

MongoDB

2012-09-20 10:13:04

MongoDB

2010-07-14 17:36:00

Perl運算符

2011-05-26 16:18:51

Mongodb

2011-04-29 13:40:37

MongoDBCommand

2011-03-04 09:32:31

NoSQL就業形勢Cassandra

2011-05-24 10:11:30

MySQLMongoDB

2023-12-01 10:21:00

機器學習算法

2011-05-24 09:23:16

MySQLMongoDB

2011-05-24 09:51:07

MySQLMongoDB

2017-04-26 08:51:36

MongoDB集群實戰
點贊
收藏

51CTO技術棧公眾號

国产一区电影| 国产丝袜在线| 青娱乐精品视频| 国产精品影片在线观看| 成人线上视频| 亚洲丁香婷深爱综合| 免费网站黄在线观看| 精品国产91乱高清在线观看| 69国产精品| 欧美国产日韩一二三区| 国产精品12345| 九九**精品视频免费播放| 久久精品国产一区二区三区不卡| 小说区图片区色综合区| 欧美老妇交乱视频| 不卡精品视频| 亚洲偷欧美偷国内偷| 免费男女羞羞的视频网站在线观看| 欧美在线一二三四区| 日韩欧美电影在线观看| 天天影视色香欲综合网老头| 性视频一区二区三区| 欧美色视频日本高清在线观看| 一二三区在线视频| 欧美午夜女人视频在线| 日本1级在线| 欧美乱妇20p| 日日夜夜天天综合入口| 日韩精品视频在线播放| 少妇一区视频| 另类天堂视频在线观看| 清纯唯美激情亚洲| 久久人人爽国产| 在线成人动漫av| 成人激情免费在线| 妖精视频成人观看www| 日韩高清av| 国产精品精品视频一区二区三区| 一本色道69色精品综合久久| 久久露脸国产精品| 国产精品一区二区三区av麻| 国产区亚洲区欧美区| 综合视频在线| 欧美极品视频一区二区三区| 精品综合久久久久久8888| 国产一级大片免费看| 不卡一区中文字幕| 亚洲视频第二页| 都市激情亚洲色图| 国产成人无吗| 最近2019中文字幕第三页视频 | a天堂中文在线| 亚洲国产精品资源| 成人黄色毛片| 国产精品电影观看| 亚洲永久视频| 日本丰满少妇xxxx| 一区二区在线观看免费视频播放| 毛片在线播放网址| 亚洲理论在线a中文字幕| 国产乱人伦精品一区| 国产精品中出一区二区三区| 成人免费看的视频| 性网站在线播放| 亚洲性视频网址| 97视频热人人精品免费| 日韩一二区视频| 午夜欧美在线一二页| 性欧美freesex顶级少妇| 欧美综合第一页| 麻豆国产精品777777在线| 久久精品无码一区二区日韩av| 精品国产91洋老外米糕| 欧美美女在线观看| 91精品国产吴梦梦| 日韩欧美国产中文字幕| 96sao精品免费视频观看| 国产一区二区三区四区五区加勒比 | av网站在线不卡| 69av一区二区三区| 视频一区中文字幕精品| 久久久综合香蕉尹人综合网| 国产精品色一区二区三区| 国产激情在线视频| 91精品国产色综合久久不卡98口| 日韩在线卡一卡二| eeuss在线观看| 久久久久999| 久久九九国产| 在线看国产视频| 欧美成人性色生活仑片| 玖玖在线精品| 中文字幕欧美一区二区| 欧美成人高清视频| 日韩电影一区二区三区四区| 欧美成人影院在线播放| 中文字幕日韩精品在线| 国产精品av久久久久久麻豆网| 污污网站免费观看| 国产亚洲xxx| 日韩精品乱码av一区二区| 日本不卡视频一区二区| 欧美影院久久久| 久久亚洲影视婷婷| 欧美极度另类| 亚洲综合首页| 91精品国产综合久久久久久久久久| 久久久久久久久久电影| 久久er99热精品一区二区三区 | 亚洲国产成人一区| 亚洲美女免费在线| 日韩视频在线一区二区三区| 色噜噜狠狠一区二区| 久久久久久a亚洲欧洲aⅴ| 色偷偷88欧美精品久久久| 国产成人av网站| 国模雨婷捆绑高清在线| 国产h视频在线播放| 97人人模人人爽人人少妇| 国产精品香蕉视屏| 欧美在线观看网站| 亚洲欧美制服综合另类| 欧美午夜电影在线播放| 91精品国产品国语在线不卡| 亚洲美洲欧洲综合国产一区| 国产精品一卡| 成人精品天堂一区二区三区| 中文字幕人成乱码在线观看| 妞干网免费在线视频| 在线三级电影| 涩涩网在线视频| 免费超碰在线| 激情综合色综合啪啪开心| 国产成人aaa| 中文.日本.精品| 午夜欧美福利视频| 欧美日韩高清在线观看| 精品视频一区二区三区免费| 99精品国产视频| 日韩精品色哟哟| 91麻豆国产自产在线观看| caoporen国产精品视频| 天堂成人国产精品一区| 寂寞少妇一区二区三区| 国产精品一区二区在线播放| 天天射—综合中文网| 久久成人高清| 超碰cao国产精品一区二区| 九九免费精品视频在线观看| 午夜国产精品视频免费体验区| 亚洲精品四区| 米奇777超碰欧美日韩亚洲| 99在线视频影院| 久久www人成免费看片中文| 怡红院av在线| 污视频免费在线观看| 日本在线视频www鲁啊鲁| 免费av网站在线看| 欧美日韩不卡| 激情小说亚洲色图| 欧美亚洲自偷自偷| 欧美日本不卡| 亚洲日本成人| 久久久久久久综合日本| 一区二区在线观看视频| 亚洲黄页网站| 头脑特工队2免费完整版在线观看| 国产九色精品| 欧美成人三级在线| 不卡av免费在线观看| 美国一区二区| 成人在线视频成人| www.日本三级| 国产精品www色诱视频| 555www色欧美视频| 91视频www| 综合国产精品| 日韩在线观看不卡| 在线视频中文字幕| 亚洲高清视频在线观看| 欧美大片免费观看| 欧美美女一区二区在线观看| 91丨九色丨蝌蚪丨老版| 欧美精品偷拍| 电影一区中文字幕| 9色在线视频网站| 国产欧美高清在线| 久久精品二区| 欧美黄色片免费观看| 欧美一区二区私人影院日本| 国产日产欧美一区| 免费在线日韩av| 精品在线手机视频| 户外露出一区二区三区| 天堂av中文在线资源库| 免费看欧美一级片| 成人欧美一区二区三区视频xxx| 日韩在线免费观看视频| 欧美日韩午夜在线| √…a在线天堂一区|