场景是目前有个Mongo的collection中的name字段,name字段长度正常在4-10个中文左右,25W数据量。如果我用startswith匹配name查询的话性能会有怎样的压力呢?
如果给name字段加上全文索引又会有什么样的好处和坏处呢?
怪我咯2017-04-18 09:40:12
공통 인덱스가 있는 경우 고정 접두어를 사용하는 쿼리는 해당 인덱스를 사용할 수 있습니다. 하지만 당신이 말하는 startwith 메소드가 드라이버에 있다면 드라이버와 해당 문서에 나와 있는 내용에 따라 다릅니다. 내가 언급하는 접두사는 다음과 같이 ^
으로 시작하는 정규 표현식의 일치입니다.
실행 계획을 보면 IX_SCAN
:
전체 텍스트 색인은 또 다른 문제입니다. 간단히 말하면 접두사가 고정되어 있는지 고려할 필요는 없지만, 전체 텍스트 색인의 기본 단위는 단어가 아닌 词
입니다. 그래서 다음 단락:
1부리그는 좋은 학교입니다
검색 시 다음과 같이 원하는 단어를 바로 찾을 수 있습니다.
으아악단, "학교"로 직접 검색하시면 못 찾으실 수도 있습니다.
으아악물론 이는 단어 분할 엔진이 어떻게 구분되는지와 관련이 있습니다. 이 예는 단지 전체 텍스트 인덱싱의 한계를 설명하기 위한 것입니다.
또한 "개성"과 같이 실제 의미가 없는 관사, 수량사 및 기타 단어도 필터링됩니다.
또한 컬렉션에는 전체 텍스트 인덱스가 하나만 있을 수 있으므로 위 쿼리에서는 name
필드가 전혀 언급되지 않는다는 점을 알 수 있습니다.