2월의 할인 혜택은 다음과 같습니다. 인덱스 어드바이저 서비스 에서 발견된 몇 가지 버그를 수정한 후 업데이트했습니다. 앞으로도 인덱스 어드바이저 서비스(무슨 일이죠?). 일반적으로 다음 유지 관리 릴리스에서 볼 수 있는 Index Advisor의 수정 사항을 이제 매월 사용할 수 있습니다.
누구를 위한 서비스인가요? 언제 사용해야 하나요?
https://index-advisor.couchbase.com/
반복해서 말씀드리지만,
이 서비스는 DBA, 개발자, 아키텍트가 쿼리 성능을 최적화하고 SLA를 충족하는 데 도움이 되는 인덱스 권장 사항을 제공합니다.
이 서비스는 다음과 같은 경우에 유용합니다:
- 읽지 않으려면 인덱스 생성 규칙를 살펴보고, 이를 이해하고, 구현하여 쿼리/질문/워크로드에 적합한 인덱스를 찾아보세요.
- 아직 최신 Couchbase 6.5 서버를 다운로드하고 싶지 않습니다.
- 사용 중입니다. 구형 카우치베이스 버전(버전 5.5,6.0) 쿼리에 적합한 인덱스를 만드는 데 도움이 필요합니다.
- 인덱스에 대한 조언을 생성하고 싶습니다. 버킷을 만들지 않고 또는 스키마 또는 데이터를 업로드합니다.
새로운 기능은 무엇인가요?
카우치베이스 서버 6.5 서버를 다운로드하고 쿼리 워크벤치에서 인덱스 어드바이저를 사용할 수 있는 경우에도, 이 인덱스 어드바이저는 최신 버전(보기 좋은 UI는 없지만 다음과 같은 결함이 수정된 버전)입니다.
1. 가상 키 공간에 대한 인덱스 조언
2. 삭제/병합/업데이트 문을 위한 가상 키 공간을 지원하는 인덱스 어드바이저
이 두 가지 수정 사항을 모두 적용하면 다음과 같은 쿼리가 수정됩니다.
|
1 |
advise delete FROM aa where type="beer" ; |
를 제공하던
|
1 2 3 4 5 6 7 8 9 10 |
<span style="color: #ff0000">[ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": [] }, "query": "delete FROM aa where type=\"beer\" ;" } ]</span> |
이제
|
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 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "covering_indexes": [ { "index_statement": "CREATE INDEX adv_type ON `aa`(`type`)", "keyspace_alias": "aa" } ], "indexes": [ { "index_statement": "CREATE INDEX adv_type ON `aa`(`type`)", "keyspace_alias": "aa", "recommending_rule": "Index keys follow order of predicate types: 2. equality/null/missing." } ] } } }, "query": "delete FROM aa where type=\"beer\" ;" } ] } |
3. Meta() 표현식에서 식별자를 제거하는 인덱스 어드바이저
다음과 같은 쿼리의 경우:
|
1 |
SELECT * FROM `beer-sample` d where SPLIT(meta(d).id, ":")[0] like "%cafe" |
우리는 얻을 것입니다
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span style="color: #ff0000">{ "adviseResult": [ { "current_indexes": [ { "index_statement": "CREATE PRIMARY INDEX beer_primary ON `beer-sample`", "keyspace_alias": "beer-sample_d" } ], "recommended_indexes": { "indexes": [ { "index_statement": "CREATE INDEX adv_split_meta_d_id_0 ON `beer-sample`(split((meta(`d`).`id`), ':')[0])", "keyspace_alias": "beer-sample_d", "recommending_rule": "Index keys follow order of predicate types: 9. function index." } ] } } ] }</span> |
이제 이를 다음과 같이 수정했습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "indexes": [ { "index_statement": "CREATE INDEX adv_split_meta_self_id_0 ON `beer-sample`(split((<span style="color: #3366ff">meta(`self`)</span>.`id`), ':')[0])", "keyspace_alias": "beer-sample_d", "recommending_rule": "Index keys follow order of predicate types: 9. like." } ] } } }, "query": "SELECT * FROM `beer-sample` d where SPLIT(meta(d).id, \":\")[0] like \"%cafe\"" } ] } |
를 클릭하세요.
4. 쿼리: 조언 기능 혼란스러운 메시지
혼란스러운 오류 메시지가 보다 상세하고 명확한 설명으로 대체되었습니다.
5. USE 인덱스 키워드가 있는 쿼리에 조언을 사용하면 잘못된 오류가 반환됩니다.
|
1 |
advise select id,url,address,title,city,name,country,public_likes from bucket0 <strong>use index (def_primary)</strong> where some p in public_likes satisfies p like "Ge%" END AND type = "hotel" order by id, url, address, title, city DESC, name, country |
제공에 사용
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span style="color: #ff0000">[ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": [ { "recommended_indexes": "No index recommendation at this time: no keyspace found." } ] }, "query": "select id,url,address,title,city,name,country,public_likes from bucket0 use index (def_primary) where some p in public_likes satisfies p like \"Ge%\" END AND type = \"hotel\" order by id, url, address, title, city DESC, name, country" } ]</span> |
이제
|
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 |
{ "results": [ { "#operator": "Advise", "advice": { "#operator": "IndexAdvice", "adviseinfo": { "recommended_indexes": { "covering_indexes": [ { "index_statement": "CREATE INDEX adv_type_DISTINCT_public_likes_id_url_city_name_title_address_country_public_likes ON `bucket0`(`type`,DISTINCT ARRAY `p` FOR p in `public_likes` END,`id`,`url`,`city`,`name`,`title`,`address`,`country`,`public_likes`)", "keyspace_alias": "bucket0" } ], "indexes": [ { "index_statement": "CREATE INDEX adv_type_DISTINCT_public_likes ON `bucket0`(`type`,DISTINCT ARRAY `p` FOR p in `public_likes` END)", "keyspace_alias": "bucket0", "recommending_rule": "Index keys follow order of predicate types: 2. equality/null/missing, 6. array predicate." } ] } } }, "query": "select id,url,address,title,city,name,country,public_likes from bucket0 use index (def_primary) where some p in public_likes satisfies p like \"Ge%\" END AND type = \"hotel\" order by id, url, address, title, city DESC, name, country" } ] } |
몇 가지 작은 개선 사항도 추가되었습니다.
사용해 보시고 인덱스 어드바이저 서비스에서 추천하는 인덱스에 문제가 있는 경우 이 블로그에 댓글로 추가할 수 있습니다.
인덱스 어드바이저 기능에 대해 자세히 알아보세요:
https://www.couchbase.com/blog/index-advisor-service/
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