6월의 할인 혜택은 다음과 같습니다. 인덱스 어드바이저 서비스 를 5월에 마지막으로 새로 고친 후 발견된 몇 가지 버그를 수정한 후 N1QL용으로 업데이트했습니다. 앞으로도 인덱스 어드바이저 서비스(무슨 일이죠?). 일반적으로 다음 유지 관리 릴리스에서 볼 수 있는 Index Advisor의 수정 사항을 이제 매달 사용할 수 있습니다.
누구를 위한 서비스인가요? 언제 사용해야 하나요?
http://index-advisor.couchbase.com/
반복해서 말씀드리지만,
이 서비스는 DBA, 개발자 및 아키텍트가 쿼리 성능을 최적화하고 SLA를 충족할 수 있도록 인덱스 권장 사항을 제공합니다.Index Advisor는 Enterprise Edition의 일부로 제공되지만 이 서비스는 무료로 사용할 수 있습니다!
이 서비스는 다음과 같은 경우에 유용합니다:
- 읽지 않으려면 인덱스 생성 규칙를 살펴보고, 이를 이해하고, 구현하여 쿼리/질문/워크로드에 적합한 인덱스를 찾아보세요.
- 카우치베이스 커뮤니티 에디션을 계속 사용하고 싶습니다.
- 사용 중입니다. 구형 카우치베이스 버전(버전 5.5,6.0) 쿼리에 적합한 인덱스를 만드는 데 도움이 필요합니다.
- 인덱스에 대한 조언을 생성하고 싶습니다. 버킷을 만들지 않고 또는 스키마 또는 데이터를 업로드합니다.
새로운 기능은 무엇인가요?
카우치베이스 서버 6.5 서버를 다운로드하고 쿼리 워크벤치에서 인덱스 어드바이저를 사용할 수 있는 경우에도, 이 인덱스 어드바이저는 최신 버전(보기 좋은 UI는 없지만 다음과 같은 결함이 수정된 버전)입니다.
1. Advise가 조인 작업에 대한 커버링 인덱스를 제공하지 못했습니다.
이 개선 사항으로 다음과 같은 쿼리는
1 2 3 4 |
조언 선택 t_1.int_field1 , t_1.십진수_field1 , t_1.primary_key_id , t_1.bool_field1 FROM bucket_01 t_1 INNER JOIN bucket_04 t_4 켜기 ( t_1.기본_키_ID = t_4.primary_key_id ) INNER JOIN bucket_04 t_5 켜기 ( t_1.기본_키_ID = t_5.primary_key_id ); |
를 제공하던
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "커버링_인덱스": [ { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_4" }, { "index_statement": "`버킷_04`() 위에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_5" } ], "인덱스": [ { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_4", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." }, { "index_statement": "`버킷_01`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 6. 파생된 조인 필터를 선행 키로 사용합니다." } ] } } }, "query": "SELECT t_1.int_field1 , t_1.decimal_field1 , t_1.primary_key_id , t_1.bool_field1\nFROM bucket_01 t_1\nINNER JOIN bucket_04 t_4\nON ( t_1.primary_key_id = t_4.primary_key_id )\nINNER JOIN bucket_04 t_5\nON ( t_1.primary_key_id = t_5.primary_key_id );" } ] } |
이 쿼리는 bucket_01에 대한 커버링 인덱스 추천을 제공하지 못했습니다.
이제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "커버링_인덱스": [ { "index_statement": "`버킷_01`(`primary_key_id`,`int_field1`,`bool_field1`,`decimal_field1`) 위에 인덱스 adv_primary_key_id_int_field1_bool_field1_decimal_field1 생성", "키스페이스_알리어스": "bucket_01_t_1" }, { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_4;bucket_04_t_5" } ], "인덱스": [ { "index_statement": "`버킷_01`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 6. 파생된 조인 필터를 선행 키로 사용합니다." }, { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_4;bucket_04_t_5", "추천_규칙": { "bucket_04_t_4": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어.", "bucket_04_t_5": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." } } ] } } }, "query": "SELECT t_1.int_field1 , t_1.decimal_field1 , t_1.primary_key_id , t_1.bool_field1 FROM bucket_01 t_1 INNER JOIN bucket_04 t_4 ON ( t_1.primary_key_id = t_4.primary_key_id ) INNER JOIN bucket_04 t_5 ON ( t_1.primary_key_id = t_5.primary_key_id );" } ] } |
2. 조언이 때때로 빈 인덱스 권장 사항을 반환합니다.
다음과 같은 쿼리입니다:
1 2 3 4 5 6 7 |
조언 선택 t_1.int_field1 , t_1.십진수_field1 , t_1.primary_key_id , t_1.bool_field1 FROM bucket_01 t_1 왼쪽 JOIN bucket_05 t_1SiRAdlidCB 켜기 ( t_1.기본_키_ID = t_1SiRAdlidCB.primary_key_id ) 왼쪽 JOIN bucket_010 t_1fLjtGGSnKf 켜기 ( t_1.기본_키_ID = t_1fLjtGGSnKf.primary_key_id ) INNER JOIN bucket_04 t_1GHMwUzdukS 켜기 ( t_1.기본_키_ID = t_1GHMwUzdukS.primary_key_id ) INNER JOIN bucket_04 t_1LjVrlSNfDc 켜기 ( t_1.기본_키_ID = t_1LjVrlSNfDc.primary_key_id ) 어디 ((t_1.기본_키_ID IS NOT NULL AND t_1.int_field1 IS NULL)) 또는 ((t_1.int_field1 >= 47635891 또는 t_1.varchar_field1 IS NOT NULL)); |
제공에 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "커버링_인덱스": [ { "index_statement": "`버킷_05`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_05_t_1SiRAdlidCB" }, { "index_statement": "`버킷_010`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_010_t_1fLjtGGSnKf" }, { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_1GHMwUzdukS" }, { "index_statement": "`버킷_04`() 위에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_1LjVrlSNfDc" } ], "인덱스": [ { "index_statement": "`버킷_01`(`int_field1`,`primary_key_id`) 상에 인덱스 adv_int_field1_primary_key_id를 생성", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 1. 연결 해제를 위한 공통 선행 키(2. 같음/눌림/누락), 7. 없음/눌림 없음/값 없음)." }, { "index_statement": "`버킷_01`(`varchar_field1`) 상에 인덱스 adv_varchar_field1 생성", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 7. null/누락되지 않음/값이 없음." }, { "index_statement": "`버킷_05`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_05_t_1SiRAdlidCB", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." }, { "index_statement": "`버킷_010`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_010_t_1fLjtGGSnKf", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." }, { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_1GHMwUzdukS", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." } ] } } }, "query": "SELECT t_1.int_field1 , t_1.decimal_field1 , t_1.primary_key_id , t_1.bool_field1 FROM bucket_01 t_1 LEFT JOIN bucket_05 t_1SiRAdlidCB ON ( t_1.primary_key_id = t_1SiRAdlidCB.primary_key_id ) LEFT JOIN bucket_010 t_1fLjtGGSnKf ON ( t_1.primary_key_id = t_1fLjtGGSnKf.primary_key_id ) INNER JOIN bucket_04 t_1GHMwUzdukS ON ( t_1.primary_key_id = t_1GHMwUzdukS.primary_key_id ) INNER JOIN bucket_04 t_1LjVrlSNfDc ON ( t_1.primary_key_id = t_1LjVrlSNfDc.primary_key_id ) WHERE ((t_1.primary_key_id IS NOT NULL AND t_1.int_field1 IS NULL)) OR ((t_1.int_field1 >= 47635891 OR t_1.varchar_field1 IS NOT NULL));" } ] } |
권장되는 빈 인덱스가 하나 있으며, 해당 인덱스가 커버하고 있지만 술어의 필드를 포함하지 않는다고 나와 있습니다.
이제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "커버링_인덱스": [ { "index_statement": "`버킷_05`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_05_t_1SiRAdlidCB" }, { "index_statement": "`버킷_010`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_010_t_1fLjtGGSnKf" }, { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_1GHMwUzdukS;bucket_04_t_1LjVrlSNfDc" } ], "인덱스": [ { "index_statement": "`버킷_010`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_010_t_1fLjtGGSnKf", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." }, { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_1GHMwUzdukS;bucket_04_t_1LjVrlSNfDc", "추천_규칙": { "bucket_04_t_1GHMwUzdukS": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어.", "bucket_04_t_1LjVrlSNfDc": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." } }, { "index_statement": "`버킷_01`(`int_field1`,`primary_key_id`) 상에 인덱스 adv_int_field1_primary_key_id를 생성", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 1. 연결 해제를 위한 공통 선행 키(2. 같음/눌림/누락), 7. 없음/눌림 없음/값 없음)." }, { "index_statement": "`버킷_01`(`varchar_field1`) 상에 인덱스 adv_varchar_field1 생성", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 7. null/누락되지 않음/값이 없음." }, { "index_statement": "`버킷_05`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_05_t_1SiRAdlidCB", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." } ] } } }, "query": "SELECT t_1.int_field1 , t_1.decimal_field1 , t_1.primary_key_id , t_1.bool_field1 FROM bucket_01 t_1 LEFT JOIN bucket_05 t_1SiRAdlidCB ON ( t_1.primary_key_id = t_1SiRAdlidCB.primary_key_id ) LEFT JOIN bucket_010 t_1fLjtGGSnKf ON ( t_1.primary_key_id = t_1fLjtGGSnKf.primary_key_id ) INNER JOIN bucket_04 t_1GHMwUzdukS ON ( t_1.primary_key_id = t_1GHMwUzdukS.primary_key_id ) INNER JOIN bucket_04 t_1LjVrlSNfDc ON ( t_1.primary_key_id = t_1LjVrlSNfDc.primary_key_id ) WHERE ((t_1.primary_key_id IS NOT NULL AND t_1.int_field1 IS NULL)) OR ((t_1.int_field1 >= 47635891 OR t_1.varchar_field1 IS NOT NULL));" } ] } |
3. 필드에 desc 정렬을 사용하여 추천을 제공해야 합니다.
다음과 같은 쿼리
1 |
조언 선택 국가 에서 `기본값` 어디 pro_account=true 그리고 국가 = "USA" 주문 by 국가 DESC |
제공에 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "커버링_인덱스": [ { "<span style="색상: #ff0000;" data-mce-style="색상: #ff0000;">index_statement": "`default`(`pro_account`,`country`) ON CREATE INDEX adv_pro_account_country",</span> "키스페이스_알리어스": "default" } ], "인덱스": [ { "index_statement": "`default`(`pro_account`,`country`) ON CREATE INDEX adv_pro_account_country", "키스페이스_알리어스": "default", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 2. 같음/없음/누락." } ] } } }, "query": "기본값에서 국가 선택 여기서 pro_account=true 및 country = \"USA\" 국가별 순서 DESC" } ] } |
이제 제공합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "커버링_인덱스": [ { "index_statement": "`default`(`country` DESC,`pro_account`) ON CREATE INDEX adv_countryDESC_pro_account",</span> "키스페이스_알리어스": "default" } ], "인덱스": [ { "index_statement": "`기본값`(`국가`,`프로계정`)에 `adv_country_pro_account` 인덱스 생성", "키스페이스_알리어스": "default", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 2. 같음/없음/누락." } ] } } }, "query": "기본값에서 국가 선택 여기서 pro_account=true 및 country = \"USA\" 국가별 순서 DESC" } ] } |
4. 중복 인덱스 정의에 대한 정보를 결합하는 인덱스 어드바이저
하나의 쿼리에 대해 중복된 인덱스 정의를 제거합니다.
그러나 추천 규칙이 다른 다른 keyspace_alias에 중복 인덱스가 적용되는 경우가 있습니다.
다음과 같은 쿼리입니다:
1 2 3 4 5 6 7 |
조언 선택 * FROM bucket_01 t_1 왼쪽 JOIN bucket_05 t_2 켜기 ( t_1.기본_키_ID = t_2.primary_key_id ) 왼쪽 JOIN bucket_010 t_3 켜기 ( t_1.기본_키_ID = t_3.primary_key_id ) INNER JOIN bucket_04 t_4 켜기 ( t_1.기본_키_ID = t_4.primary_key_id ) INNER JOIN bucket_04 t_5 켜기 ( t_1.기본_키_ID = t_5.primary_key_id ) 어디 ((t_1.기본_키_ID IS NOT NULL AND t_1.int_field1 IS NULL)) 또는 ((t_1.int_field1 >= 47635891 또는 t_1.varchar_field1 IS NOT NULL)); |
제공에 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "인덱스": [ { "index_statement": "`버킷_010`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_010_t_3", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." }, { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_04_t_4", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." }, { "index_statement": "`버킷_01`(`int_field1`,`primary_key_id`) 상에 인덱스 adv_int_field1_primary_key_id를 생성", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 1. 연결 해제를 위한 공통 선행 키(2. 같음/눌림/누락), 7. 없음/눌림 없음/값 없음)." }, { "index_statement": "`버킷_01`(`varchar_field1`) 상에 인덱스 adv_varchar_field1 생성", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 7. null/누락되지 않음/값이 없음." }, { "index_statement": "`버킷_05`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_05_t_2", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." } ] } } }, "query": "SELECT * FROM bucket_01 t_1 LEFT JOIN bucket_05 t_2 ON ( t_1.primary_key_id = t_2.primary_key_id ) LEFT JOIN bucket_010 t_3 ON ( t_1.primary_key_id = t_3.primary_key_id ) INNER JOIN bucket_04 t_4 ON ( t_1.primary_key_id = t_4.primary_key_id ) INNER JOIN bucket_04 t_5 ON ( t_1.primary_key_id = t_5.primary_key_id ) WHERE ((t_1.primary_key_id IS NOT NULL AND t_1.int_field1 IS NULL)) OR ((t_1.int_field1 >= 47635891 OR t_1.varchar_field1 IS NOT NULL));" } ] } |
이제 제공합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "인덱스": [ { "index_statement": "`버킷_01`(`int_field1`,`primary_key_id`) 상에 인덱스 adv_int_field1_primary_key_id를 생성", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 1. 연결 해제를 위한 공통 선행 키(2. 같음/눌림/누락), 7. 없음/눌림 없음/값 없음)." }, { "index_statement": "`버킷_01`(`varchar_field1`) 상에 인덱스 adv_varchar_field1 생성", "키스페이스_알리어스": "bucket_01_t_1", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 7. null/누락되지 않음/값이 없음." }, { "index_statement": "`버킷_05`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_05_t_2", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." }, { "index_statement": "`버킷_010`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": "bucket_010_t_3", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." }, { "index_statement": "`버킷_04`(`primary_key_id`)에 인덱스 adv_primary_key_id를 생성합니다.", "키스페이스_알리어스": <span 스타일="color: #0000ff;" 데이터-mce-스타일="color: #0000ff;">"bucket_04_t_4;bucket_04_t_5"</span>, "추천_규칙": { "bucket_04_t_4": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어.", "bucket_04_t_5": "인덱스 키는 술어 유형의 순서를 따릅니다: 9. 비정적 조인 술어." } } ] } } }, "query": "SELECT * \nFROM bucket_01 t_1 \nLEFT JOIN bucket_05 t_2 ON ( t_1.primary_key_id = t_2.primary_key_id ) \nLEFT JOIN bucket_010 t_3 ON ( t_1.primary_key_id = t_3.primary_key_id ) \nINNER JOIN bucket_04 t_4 ON ( t_1.primary_key_id = t_4.primary_key_id ) \nINNER JOIN bucket_04 t_5 ON ( t_1.primary_key_id = t_5.primary_key_id ) \nWHERE ((t_1.primary_key_id IS NOT NULL AND t_1.int_field1 IS NULL)) OR ((t_1.int_field1 >= 47635891 OR t_1.varchar_field1 IS NOT NULL));" } ] } |
5. 인덱스 어드바이저가 네스트가 아닌 쿼리에 대해 잘못된 인덱스 추천을 반환하는 경우
다음과 같은 쿼리입니다:
1 2 3 |
조언 선택 메타(t).id _id,t.유형,branch.branchId FROM 테스트 AS t UNNEST t.브랜치 AS branch 어디 t.유형 는 가치 AND branch.branchId > (t.currentBranch-2) 주문 by branch.마지막 업데이트 |
기부하는 데 사용됩니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "인덱스": [ { "index_statement": "CREATE INDEX adv_ALL_branches_type_2 ON `test`(<span style="색상: #ff0000;" data-mce-style="색상: #ff0000;">ALL `\ube0c\ub79c\uce58`,`\uc720\ud615`,2<\/span>)", "키스페이스_알리어스": "test_t", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 1. 중첩되지 않은 경우 선행 배열 인덱스, 7. null/누락되지 않음/값이 없음, 9. 정적이 아닌 조인 조건." } ] } } }, "query": "SELECT meta(t).id _id,t.type,branch.branchId FROM test AS t UNNEST t.branches AS branch WHERE t.type은 값이고 branch.branchId > (t.currentBranch-2) order by branch.lastUpdateOn" } ] } |
이제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "결과": [ { "#operator": "조언", "조언": { "#operator": "IndexAdvice", "adviseinfo": { "권장_인덱스": { "인덱스": [ { "index_statement": "CREATE INDEX adv_ALL_branches_branchId_type ON `test`(<span style="색상: #0000ff;" data-mce-style="색상: #0000ff;">ALL ARRAY `branch`.`branchId` FOR branch IN `branches` END,` type`<\/span>)", "키스페이스_알리어스": "test_t", "추천_규칙": "인덱스 키는 술어 유형의 순서를 따릅니다: 1. 중첩되지 않은 경우 선행 배열 인덱스, 7. null/누락되지 않은 경우/값이 있는 경우." } ] } } }, "query": "SELECT meta(t).id _id,t.type,branch.branchId\nFROM test AS t\nUNNEST t.branches AS branch\nWHERE t.type은 값이고 branch.branchId > (t.currentBranch-2) order by branch.lastUpdateOn" } ] } |
사용해 보시고 인덱스 어드바이저 서비스에서 추천하는 인덱스에 문제가 있는 경우 이 블로그에 댓글로 추가할 수 있습니다.
인덱스 어드바이저 기능에 대해 자세히 알아보세요:
https://www.couchbase.com/blog/index-advisor-service/
https://www.couchbase.com/blog/index-advisor-service-for-couchbase-n1qlfeb-refresh/
https://www.couchbase.com/blog/index-advisor-service-for-n1ql-march-refresh/
https://www.couchbase.com/blog/n1ql-index-advisor-improve-query-performance-and-productivity/
https://www.couchbase.com/blog/index-advisor-for-query-workload/
https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/advise.html
https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/advisor.html
https://docs.couchbase.com/server/6.5/tools/query-workbench.html#index-advisor