<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## **1、索引基礎** 索引是對數據庫表中一列或多列的值進行排序的一種結構,可以讓我們查詢數據庫變得 更快。MongoDB 的索引幾乎與傳統的關系型數據庫一模一樣,這其中也包括一些基本的查 詢優化技巧。 下面是創建索引的命令: ``` db.user.ensureIndex({"username":1}) ``` 獲取當前集合的索引: ``` db.user.getIndexes() ``` 刪除索引的命令是: ``` db.user.dropIndex({"username":1}) ``` 在 MongoDB 中,我們同樣可以創建復合索引,如: 數字 1 表示 username 鍵的索引按升序存儲,-1 表示 age 鍵的索引按照降序方式存儲。 ``` db.user.ensureIndex({"username":1, "age":-1}) ``` 該索引被創建后,基于 username 和 age 的查詢將會用到該索引,或者是基于 username 的查詢也會用到該索引,**但是只是基于 age 的查詢將不會用到該復合索引**。因此可以說, 如果**想用到復合索引**,**必須在查詢條件中包含復合索引中的前 N 個索引列**。然而如果查詢 條件中的鍵值順序和復合索引中的創建順序不一致的話,MongoDB 可以智能的幫助我們調 整該順序,以便使復合索引可以為查詢所用。如: ``` db.user.find({"age": 30, "username": "stephen"}) ``` 對于上面示例中的查詢條件,MongoDB 在檢索之前將會動態的調整查詢條件文檔的順 序,以使該查詢可以用到剛剛創建的復合索引。 對于上面創建的索引,MongoDB 都會根據索引的 keyname 和索引方向為新創建的索引 自動分配一個索引名,下面的命令可以在**創建索引時為其指定索引名**,如: ``` db.user.ensureIndex({"username":1},{"name":"userindex"}) ``` 隨著集合的增長,需要針對查詢中大量的排序做索引。如果沒有對索引的鍵調用 sort, MongoDB 需要將所有數據提取到內存并排序。因此在做無索引排序時,如果數據量過大以 致無法在內存中進行排序,此時 MongoDB 將會報錯。 ## **2、唯一索引** 在缺省情況下創建的索引均不是唯一索引。下面的示例將創建唯一索引,如: ``` db.user.ensureIndex({"userid":1},{"unique":true}) ``` 如果再次插入 userid 重復的文檔時,MongoDB 將報錯,以提示插入重復鍵,如: ``` db.user.insert({"userid":5}) db.user.insert({"userid":5}) ``` > *E11000 duplicate key error index: user.user.$userid\_1 dup key: { : 5.0 }* 如果插入的文檔中不包含 userid 鍵,那么該文檔中該鍵的值為 null,如果多次插入類似 的文檔,MongoDB 將會報出同樣的錯誤,如: ``` db.user.insert({"userid1":5}) db.user.insert({"userid1":5}) ``` > *E11000 duplicate key error index: user.user.$userid\_1 dup key: { : null }* 如果在創建唯一索引時已經存在了重復項,我們可以通過下面的命令幫助我們在創建唯 一索引時消除重復文檔,僅保留發現的第一個文檔,如: 先刪除剛剛創建的唯一索引。 ``` db.user.dropIndex({"userid":1}) ``` 插入測試數據,以保證集合中有重復鍵存在。 ``` db.user.remove() db.user.insert({"userid":5}) db.user.insert({"userid":5}) ``` 重新創建唯一索引 ``` db.user.ensureIndex({"userid":1},{"unique":true }) ``` ![](https://box.kancloud.cn/689209a0f82c37330cb012784974f349_1404x226.png) 我們同樣可以創建復合唯一索引,即保證復合鍵值唯一即可。如: ``` db.user.ensureIndex({"userid":1,"age":1},{"unique":true}) ``` ## **3、索引的一些參數** ![](https://box.kancloud.cn/46ea53dd51ca8383a591c25251fae102_1346x405.png) 如果在為已有數據的文檔創建索引時,可以執行下面的命令,以使 MongoDB 在后臺創 建索引,這樣的創建時就不會阻塞其他操作。但是相比而言,以阻塞方式創建索引,會使整 個創建過程效率更高,但是在創建時 MongoDB 將無法接收其他的操作。 ``` db.user.ensureIndex({"username":1},{"background":true}) ``` ## **3、使用 explain** explain 是非常有用的工具,會幫助你獲得查詢方面諸多有用的信息。只要對游標調用 該方法,就可以得到查詢細節。explain 會返回一個文檔,而不是游標本身。如: ![](https://box.kancloud.cn/e6334e71b8c54ed2cd6987d3ee6f7c9a_1040x862.png) explain 會返回查詢使用的索引情況,耗時和掃描文檔數的統計信息。 ## **5、explain executionStats 查詢具體的執行 時間** ``` db.tablename.find().explain( "executionStats" ) 關注輸出的如下數值:explain.executionStats.executionTimeMillis ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看