mongodb 聯合索引和單一欄位索引效能那個好些。
为情所困
为情所困 2017-05-02 09:22:03
0
1
747

現在遇到一個效能問題,解決方法就是在欄位加索引,現在糾結的是欄位組合索引還是單一索引查詢效率問題?

場景
現在查詢欄位是parentId,key ,兩個欄位同時查詢。

現在見索引的方案是
1 分別給 parentId,key加上索引

2 建立一個組合索引 {parentId:1,key:1}這樣的方式:

這兩個查詢效能是不是差不多啊?

求證

为情所困
为情所困

全部回覆 (1)
伊谢尔伦

索引效率來說肯定是聯合索引效率高,很多時候如果用多個欄位查詢應該考慮用聯合索引。
但是事情也沒有完全的絕對,也要考慮到索引的開銷。
以你的條件為例,假設key能夠唯一確定一筆記錄,parentId是不是就沒有必要加上了呢?key能够唯一确定一条记录,parentId是不是就没有必要加上了呢?
退一步,即使key不能唯一确定一条,如果它能够把结果集确定在一定的小范围内,比如5条记录,10条记录,那parentId退一步,即使key不能唯一確定一條,如果它能夠把結果集確定在一定的小範圍內,比如5條記錄,10條記錄,那parentId這個條件無非就是在這10筆記錄內再掃一遍尋找合適的記錄,比起把它加進索引中造成的寫入和存儲、內存開銷,我可能會選擇根本不把它放進聯合索引裡。
一個條件能過濾掉的記錄越多,我們說它的「選擇性」(selectivity)越好。一般情況下,我們在建立索引的時候都要把選擇性越好的條件放前面,選擇性差的放後。差到一定程度就別放進來了。
這其實是一個時間和空間的平衡。放進索引裡的條件省時間(含CPU時間,查詢時間)費空間(包含儲存空間,記憶體空間);不放進索引裡的條件費時間,省空間。大部分時候我們是期望得到前者的,什麼時候選擇後者就看你自己對實際狀況的評估了。

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!