couchbase 쿼리 플랜의 작동 방식을 이해하는 데 문제가 있습니다. Couchbase 4.1에서 SpringData를 사용하고 Couchbase 저장소의 사용자 정의 구현을 제공한다. 카우치베이스 주식회사 저장소의 내 사용자 지정 implememtnation 내부 내가 방법을 아래에있다 : 결과에서Couchbase는 N1QL 매개 변수화 된 쿼리와 함께 잘못된 인덱스를 사용합니다.
String queryAsString = "SELECT MyDatabase.*, META().id as _ID, META().cas as _CAS FROM MyDatabase WHERE segmentId = $id AND _class = $class ORDER BY executionTime DESC LIMIT 1";
JsonObject params = JsonObject.create()
.put(CLASS_VARIABLE, MyClass.class.getCanonicalName())
.put(ID_VARIABLE, segmentId);
N1qlQuery query = N1qlQuery.parameterized(queryAsString, params);
List<MyClass> resultList = couchbaseTemplate.findByN1QL(query, SegmentMembers.class);
return resultList.isEmpty() ? null : resultList.get(0);
, 봄의 데이터는 다음과 같은 JSON 객체는 카우치베이스 주식회사에 질의 표현이 생성
{
"$class":"path/MyClass",
"statement":"SELECT MyDatabase.*, META().id as _ID, META().cas as _CAS from MyDatabase where segmentId = $id AND _class = $class ORDER BY executionTime DESC LIMIT 1",
"id":"6592c16a-c8ae-4a74-bc17-7e18bf73b3f8"
}
을 그리고 그 문제는 내가 실행할 때 성능입니다 그것은 Java와 N1QL Rest API 또는 cbq 콘솔을 통해 가능합니다. 이 쿼리를 cbq에서 실행하려면 매개 변수 참조를 정확한 값으로 바꾸기 만하면됩니다.
select 문 앞에 EXPLAIN 절을 추가 한 후에 다른 실행 계획을 언급했습니다. 이 쿼리를 Java Spring 데이터 또는 N1QL Rest API를 통해 매개 변수화 된 쿼리로 실행합니다.이 쿼리에서는이 경우에 대해 정확하게 만든 인덱스를 사용하지 않는다고 언급했습니다. 인덱스 definiton 아래 찾을 수 있습니다 나는 CBQ의 CONSOL를 통해 쿼리를 실행할 때
는CREATE INDEX `testMembers` ON MyDatabase `m`(`_class`,`segmentId`,`executionTime`) WHERE (`_class` = "path/MyClass") USING GSI;
그래서, 카우치베이스 주식회사 내 idnex를 사용하여 쿼리 성능이 매우 좋다. 하지만 N1QL 나머지 API 또는 자바를 통해이 쿼리를 실행할 때 해당 쿼리가 내 인덱스를 사용하지 않는 것을 볼 수 있습니다. 이 사실을 증명하는 실행 계획의 일부 찾을 수 아래 : 그래서
"~children": [
{
"#operator": "PrimaryScan",
"index": "#primary",
"keyspace": "CSM",
"namespace": "default",
"using": "gsi"
},
을, 문제는 그 오른쪽 카우치베이스 주식회사 쿼리 최적화 프로그램의 법적 행동은? 쿼리 계획이 매개 변수의 실제 값을 고려하지 않는다는 뜻입니까? 그리고 수동으로 쿼리 문자열에 값을 넣거나 N1Ql 매개 변수가있는 쿼리와 올바른 인덱스 선택을 사용하는 다른 방법이 있습니까? 샤시 주권 대답 매개 변수 N1QL 질의에 내가 추가 N1qlParams.build(). 애드혹 (false)를 매개 변수에 따라 편집
. 이 쿼리는 여전히 성능 문제가 있으므로 내 문제가 해결되지 않습니다. 또한 쿼리를 인쇄 할 때 앞에서 설명한 것과 동일하다는 것을 알 수 있습니다. 그래서, 내 쿼리는 여전히 잘못 분석하고 성능 저하를 유발합니다.
이 문제가 해결되었는지 Couchbase 4.5.1을 사용해 볼 수 있습니까? – geraldss
아니요, 4.6에서도 수정되지 않았습니다 – gaperton
그리고 분명히 해결할 부분이 없습니다. :) 아래 내 대답을 참조하십시오. – gaperton