찾다

 >  Q&A  >  본문

mongodb 联合索引和单个字段索引性能那个好些。

现在遇到一个性能问题,解决办法就是给字段加索引,现在纠结的是字段组合索引还是单个索引查询效率问题?

场景
现在查询字段是parentId,key ,两个字段同时查询。

现在见索引的方案是
1 分别给 parentId,key添加索引

2 建一个组合索引 {parentId:1,key:1}这样的方式:

这两个查询性能是不是差不多啊?

求证

为情所困为情所困2766일 전812

모든 응답(1)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-05-02 09:24:03

    인덱스 효율성 측면에서 보면 공동 인덱스가 확실히 더 효율적입니다. 여러 필드를 사용하여 쿼리하는 경우에는 공동 인덱스 사용을 고려해야 합니다.
    그러나 상황이 완전히 절대적이지는 않으며 색인 생성에 따른 오버헤드도 고려해야 합니다.
    조건을 예로 들어 key가 레코드를 고유하게 결정할 수 있다고 가정하면 parentId을 추가할 필요가 없나요?
    한 발 뒤로 물러서 key가 유일하게 하나를 판별할 수 없더라도, 5개 레코드, 10개 레코드 등 특정 작은 범위 내에서 결과 집합을 판별할 수 있다면 parentId 이 조건은 이것에 지나지 않습니다. 10개 레코드를 다시 스캔하여 적절한 레코드를 찾습니다. 인덱스에 추가함으로써 발생하는 쓰기, 저장, 메모리 오버헤드와 비교하면 아예 공동 인덱스에 넣지 않는 것을 선택할 수도 있습니다.
    조건에서 필터링할 수 있는 레코드가 많을수록 "선택성"이 더 좋아집니다. 일반적인 상황에서는 인덱스를 구축할 때 선택성이 좋은 조건을 앞쪽에 배치하고 선택성이 나쁜 조건을 뒤쪽에 배치해야 합니다. 충분히 나쁘다면 들여보내지 마세요.
    이것은 실제로 시간과 공간의 균형입니다. 인덱스에 입력되는 조건은 저장 시간(CPU 시간, 쿼리 시간 포함)과 공간(저장 공간, 메모리 공간 포함)에 포함되지 않는 조건입니다. 대부분 우리는 전자를 기대합니다. 후자를 선택하는 시기는 실제 상황에 대한 귀하의 평가에 달려 있습니다.

    회신하다
    0
  • 취소회신하다