色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何優化mongodb的查詢,存的是很復雜的json格式數據?

錢良釵2年前12瀏覽0評論

索引支持是MongoDB高效查詢的關鍵。如果沒有索引,MongoDB必須執行集合掃描(掃描集合中所有的文檔),然后篩選匹配文檔。MongoDB中的索引與其他數據庫系統中的索引類似。MongoDB在集合級別定義索引,并支持MongoDB集合中文檔的任何字段或子字段定義索引。MongoDB索引通過B-tree實現,查詢復雜度介于O(1)到logn之間。MongoDB提供了許多不同的索引類型來支持特定類型的數據和查詢。

  1. 單字段索引:除MongoDB定義的_id索引外,MongoDB還支持在文檔的單個字段上創建用戶定義的升序/降序索引。
  2. 復合索引:MongoDB支持用戶在多個字段上定義索引,即復合索引。復合索引中字段的順序很重要。如果復合索引為{A:1,B:-1},則索引首先以A字段進行排序,然后在每個A值以B字段進行排序。
  3. 多健索引:MongoDB使用多鍵索引來索引存儲在數組中的內容。如果索引字段包含數組值,MongoDB會為數組的每個元素創建單獨的索引條目。這些多鍵索引允許查詢通過匹配數組中的元素來獲取包含數組的文檔。

以下是MongoDB查詢優化的一些基本原則:

  1. 在查詢條件、排序條件、統計條件的字段上選擇創建索引,可以顯著提高查詢效率。
  2. 必要時使用hint()強制使用某個索引查詢。
  3. 只查詢要使用的字段,而不查詢所有字段。
  4. 減少使用低效的操作符,如$where和$exists操作符,完全不能使用索引;$ne和$not操作符使用索引效率較低,甚至有時完全不用索引;$nin操作符總是會全表掃描.
  5. MongoDB在一次查詢中只能使用一個索引,所以使用$or查詢多次在合并結果,不如單次查詢的效率高。
  6. 考慮到數據分片,盡量減少跨分片查詢,比如盡量少用$in,$in會讓你的查詢去每一個分片上查一次,可以考慮在在每個分片上建索引。

另外最最重要的是,MongoDB提供explain語句,可以獲取query語句的查詢計劃(queryPlanner)、以及執行過程中的統計信息(executionStats)。MongoDB在解析完查詢之后,通常會產生幾個候選的查詢計劃,然后會為這些查詢計劃按照某個規則來打分,分數最高的查詢計劃就是合適的查詢計劃,這個查詢計劃里面使用的索引就是系統認為合適的索引。所以,如果你的查詢太慢,可以查看查詢計劃,看是否使用了你想要的索引,以及掃描的具體情況,其中統計信息里面有3個返回項,nReturned、totalKeysExamined、totalDocsExamined,分別代表該條查詢返回的條目、索引掃描條目、文檔掃描條目。對于一個理想查詢,這三個值應該盡可能接近。

最后,祝每個人的query查詢都快到起飛!