From 7f5fc4d7fdcd6c088794587c36ea9be394ec60f9 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:01:17 +0100 Subject: [PATCH 01/23] Move pages to indexes --- .../indexes => indexes/pages}/index-lifecycle.adoc | 0 .../indexes => indexes/pages}/index-replication.adoc | 0 .../pages/indexing-overview.adoc} | 0 .../indexes => indexes/pages}/storage-modes.adoc | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename modules/{learn/pages/services-and-indexes/indexes => indexes/pages}/index-lifecycle.adoc (100%) rename modules/{learn/pages/services-and-indexes/indexes => indexes/pages}/index-replication.adoc (100%) rename modules/{learn/pages/services-and-indexes/indexes/global-secondary-indexes.adoc => indexes/pages/indexing-overview.adoc} (100%) rename modules/{learn/pages/services-and-indexes/indexes => indexes/pages}/storage-modes.adoc (100%) diff --git a/modules/learn/pages/services-and-indexes/indexes/index-lifecycle.adoc b/modules/indexes/pages/index-lifecycle.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/index-lifecycle.adoc rename to modules/indexes/pages/index-lifecycle.adoc diff --git a/modules/learn/pages/services-and-indexes/indexes/index-replication.adoc b/modules/indexes/pages/index-replication.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/index-replication.adoc rename to modules/indexes/pages/index-replication.adoc diff --git a/modules/learn/pages/services-and-indexes/indexes/global-secondary-indexes.adoc b/modules/indexes/pages/indexing-overview.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/global-secondary-indexes.adoc rename to modules/indexes/pages/indexing-overview.adoc diff --git a/modules/learn/pages/services-and-indexes/indexes/storage-modes.adoc b/modules/indexes/pages/storage-modes.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/storage-modes.adoc rename to modules/indexes/pages/storage-modes.adoc From bdbcbdbdc744fbcfbfe73112798e1bb0919e5e87 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:02:50 +0100 Subject: [PATCH 02/23] Move pages to Performance --- .../pages}/early-filters-and-pagination.adoc | 0 .../indexes => performance/pages}/index-scans.adoc | 0 .../indexes => performance/pages}/index_pushdowns.adoc | 0 .../indexes => performance/pages}/indexing-and-query-perf.adoc | 0 .../indexes => performance/pages}/query-without-index.adoc | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename modules/{learn/pages/services-and-indexes/indexes => performance/pages}/early-filters-and-pagination.adoc (100%) rename modules/{learn/pages/services-and-indexes/indexes => performance/pages}/index-scans.adoc (100%) rename modules/{learn/pages/services-and-indexes/indexes => performance/pages}/index_pushdowns.adoc (100%) rename modules/{learn/pages/services-and-indexes/indexes => performance/pages}/indexing-and-query-perf.adoc (100%) rename modules/{learn/pages/services-and-indexes/indexes => performance/pages}/query-without-index.adoc (100%) diff --git a/modules/learn/pages/services-and-indexes/indexes/early-filters-and-pagination.adoc b/modules/performance/pages/early-filters-and-pagination.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/early-filters-and-pagination.adoc rename to modules/performance/pages/early-filters-and-pagination.adoc diff --git a/modules/learn/pages/services-and-indexes/indexes/index-scans.adoc b/modules/performance/pages/index-scans.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/index-scans.adoc rename to modules/performance/pages/index-scans.adoc diff --git a/modules/learn/pages/services-and-indexes/indexes/index_pushdowns.adoc b/modules/performance/pages/index_pushdowns.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/index_pushdowns.adoc rename to modules/performance/pages/index_pushdowns.adoc diff --git a/modules/learn/pages/services-and-indexes/indexes/indexing-and-query-perf.adoc b/modules/performance/pages/indexing-and-query-perf.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/indexing-and-query-perf.adoc rename to modules/performance/pages/indexing-and-query-perf.adoc diff --git a/modules/learn/pages/services-and-indexes/indexes/query-without-index.adoc b/modules/performance/pages/query-without-index.adoc similarity index 100% rename from modules/learn/pages/services-and-indexes/indexes/query-without-index.adoc rename to modules/performance/pages/query-without-index.adoc From a35e544a41b055bceef0c45ca025cc0ac9ac8780 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:04:36 +0100 Subject: [PATCH 03/23] Move diagrams to Performance --- .../{learn => performance}/partials/diagrams/query-execution.puml | 0 .../{learn => performance}/partials/diagrams/query-service.puml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename modules/{learn => performance}/partials/diagrams/query-execution.puml (100%) rename modules/{learn => performance}/partials/diagrams/query-service.puml (100%) diff --git a/modules/learn/partials/diagrams/query-execution.puml b/modules/performance/partials/diagrams/query-execution.puml similarity index 100% rename from modules/learn/partials/diagrams/query-execution.puml rename to modules/performance/partials/diagrams/query-execution.puml diff --git a/modules/learn/partials/diagrams/query-service.puml b/modules/performance/partials/diagrams/query-service.puml similarity index 100% rename from modules/learn/partials/diagrams/query-service.puml rename to modules/performance/partials/diagrams/query-service.puml From be5fd6161da6bf4848d8d992dc95eed97cd281f2 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:22:28 +0100 Subject: [PATCH 04/23] Move examples to Indexes --- .../indexes => indexes/examples}/replication-nodes.n1ql | 0 .../indexes => indexes/examples}/replication-num.n1ql | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename modules/{learn/examples/services-and-indexes/indexes => indexes/examples}/replication-nodes.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => indexes/examples}/replication-num.n1ql (100%) diff --git a/modules/learn/examples/services-and-indexes/indexes/replication-nodes.n1ql b/modules/indexes/examples/replication-nodes.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/replication-nodes.n1ql rename to modules/indexes/examples/replication-nodes.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/replication-num.n1ql b/modules/indexes/examples/replication-num.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/replication-num.n1ql rename to modules/indexes/examples/replication-num.n1ql From 3d432f58f2ef69f980c7a02672d1d821bd90ed72 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:26:27 +0100 Subject: [PATCH 05/23] Move example files to Performance --- .../indexes => performance/examples}/create-idx-array.n1ql | 0 .../indexes => performance/examples}/create-idx-composite.n1ql | 0 .../indexes => performance/examples}/create-idx-expr.n1ql | 0 .../indexes => performance/examples}/create-idx-partial.n1ql | 0 .../indexes => performance/examples}/early-filter-1.jsonc | 0 .../indexes => performance/examples}/early-filter-1.n1ql | 0 .../indexes => performance/examples}/early-filter-2.jsonc | 0 .../indexes => performance/examples}/early-filter-2.n1ql | 0 .../indexes => performance/examples}/early-filter-3.jsonc | 0 .../indexes => performance/examples}/early-filter-3.n1ql | 0 .../indexes => performance/examples}/early-filter-4.jsonc | 0 .../indexes => performance/examples}/early-filter-4.n1ql | 0 .../indexes => performance/examples}/early-filter-idx.n1ql | 0 .../indexes => performance/examples}/early-paginate-1.jsonc | 0 .../indexes => performance/examples}/early-paginate-1.n1ql | 0 .../indexes => performance/examples}/early-paginate-2.jsonc | 0 .../indexes => performance/examples}/early-paginate-2.n1ql | 0 .../indexes => performance/examples}/early-paginate-3.jsonc | 0 .../indexes => performance/examples}/early-paginate-3.n1ql | 0 .../indexes => performance/examples}/early-paginate-4.jsonc | 0 .../indexes => performance/examples}/early-paginate-4.n1ql | 0 .../indexes => performance/examples}/early-paginate-idx.n1ql | 0 .../indexes => performance/examples}/pushdown-comp-explain.jsonc | 0 .../indexes => performance/examples}/pushdown-comp-plan.jsonc | 0 .../indexes => performance/examples}/pushdown-count.jsonc | 0 .../indexes => performance/examples}/pushdown-def-city.n1ql | 0 .../indexes => performance/examples}/pushdown-distinct.jsonc | 0 .../indexes => performance/examples}/pushdown-idx-1.jsonc | 0 .../indexes => performance/examples}/pushdown-idx-2.jsonc | 0 .../indexes => performance/examples}/pushdown-idx-3.jsonc | 0 .../indexes => performance/examples}/pushdown-max.jsonc | 0 .../indexes => performance/examples}/pushdown-min.jsonc | 0 .../indexes => performance/examples}/pushdown-page-1.jsonc | 0 .../indexes => performance/examples}/pushdown-page-2.jsonc | 0 .../indexes => performance/examples}/pushdown-page-3.jsonc | 0 .../indexes => performance/examples}/pushdown-simple.jsonc | 0 .../indexes => performance/examples}/pushdown-skip.jsonc | 0 37 files changed, 0 insertions(+), 0 deletions(-) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/create-idx-array.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/create-idx-composite.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/create-idx-expr.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/create-idx-partial.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-1.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-1.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-2.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-2.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-3.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-3.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-4.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-4.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-filter-idx.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-1.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-1.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-2.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-2.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-3.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-3.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-4.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-4.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/early-paginate-idx.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-comp-explain.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-comp-plan.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-count.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-def-city.n1ql (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-distinct.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-idx-1.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-idx-2.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-idx-3.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-max.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-min.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-page-1.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-page-2.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-page-3.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-simple.jsonc (100%) rename modules/{learn/examples/services-and-indexes/indexes => performance/examples}/pushdown-skip.jsonc (100%) diff --git a/modules/learn/examples/services-and-indexes/indexes/create-idx-array.n1ql b/modules/performance/examples/create-idx-array.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/create-idx-array.n1ql rename to modules/performance/examples/create-idx-array.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/create-idx-composite.n1ql b/modules/performance/examples/create-idx-composite.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/create-idx-composite.n1ql rename to modules/performance/examples/create-idx-composite.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/create-idx-expr.n1ql b/modules/performance/examples/create-idx-expr.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/create-idx-expr.n1ql rename to modules/performance/examples/create-idx-expr.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/create-idx-partial.n1ql b/modules/performance/examples/create-idx-partial.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/create-idx-partial.n1ql rename to modules/performance/examples/create-idx-partial.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-1.jsonc b/modules/performance/examples/early-filter-1.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-1.jsonc rename to modules/performance/examples/early-filter-1.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-1.n1ql b/modules/performance/examples/early-filter-1.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-1.n1ql rename to modules/performance/examples/early-filter-1.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-2.jsonc b/modules/performance/examples/early-filter-2.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-2.jsonc rename to modules/performance/examples/early-filter-2.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-2.n1ql b/modules/performance/examples/early-filter-2.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-2.n1ql rename to modules/performance/examples/early-filter-2.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-3.jsonc b/modules/performance/examples/early-filter-3.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-3.jsonc rename to modules/performance/examples/early-filter-3.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-3.n1ql b/modules/performance/examples/early-filter-3.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-3.n1ql rename to modules/performance/examples/early-filter-3.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-4.jsonc b/modules/performance/examples/early-filter-4.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-4.jsonc rename to modules/performance/examples/early-filter-4.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-4.n1ql b/modules/performance/examples/early-filter-4.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-4.n1ql rename to modules/performance/examples/early-filter-4.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-filter-idx.n1ql b/modules/performance/examples/early-filter-idx.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-filter-idx.n1ql rename to modules/performance/examples/early-filter-idx.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-1.jsonc b/modules/performance/examples/early-paginate-1.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-1.jsonc rename to modules/performance/examples/early-paginate-1.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-1.n1ql b/modules/performance/examples/early-paginate-1.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-1.n1ql rename to modules/performance/examples/early-paginate-1.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-2.jsonc b/modules/performance/examples/early-paginate-2.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-2.jsonc rename to modules/performance/examples/early-paginate-2.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-2.n1ql b/modules/performance/examples/early-paginate-2.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-2.n1ql rename to modules/performance/examples/early-paginate-2.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-3.jsonc b/modules/performance/examples/early-paginate-3.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-3.jsonc rename to modules/performance/examples/early-paginate-3.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-3.n1ql b/modules/performance/examples/early-paginate-3.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-3.n1ql rename to modules/performance/examples/early-paginate-3.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-4.jsonc b/modules/performance/examples/early-paginate-4.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-4.jsonc rename to modules/performance/examples/early-paginate-4.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-4.n1ql b/modules/performance/examples/early-paginate-4.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-4.n1ql rename to modules/performance/examples/early-paginate-4.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/early-paginate-idx.n1ql b/modules/performance/examples/early-paginate-idx.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/early-paginate-idx.n1ql rename to modules/performance/examples/early-paginate-idx.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-comp-explain.jsonc b/modules/performance/examples/pushdown-comp-explain.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-comp-explain.jsonc rename to modules/performance/examples/pushdown-comp-explain.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-comp-plan.jsonc b/modules/performance/examples/pushdown-comp-plan.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-comp-plan.jsonc rename to modules/performance/examples/pushdown-comp-plan.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-count.jsonc b/modules/performance/examples/pushdown-count.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-count.jsonc rename to modules/performance/examples/pushdown-count.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-def-city.n1ql b/modules/performance/examples/pushdown-def-city.n1ql similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-def-city.n1ql rename to modules/performance/examples/pushdown-def-city.n1ql diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-distinct.jsonc b/modules/performance/examples/pushdown-distinct.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-distinct.jsonc rename to modules/performance/examples/pushdown-distinct.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-idx-1.jsonc b/modules/performance/examples/pushdown-idx-1.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-idx-1.jsonc rename to modules/performance/examples/pushdown-idx-1.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-idx-2.jsonc b/modules/performance/examples/pushdown-idx-2.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-idx-2.jsonc rename to modules/performance/examples/pushdown-idx-2.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-idx-3.jsonc b/modules/performance/examples/pushdown-idx-3.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-idx-3.jsonc rename to modules/performance/examples/pushdown-idx-3.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-max.jsonc b/modules/performance/examples/pushdown-max.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-max.jsonc rename to modules/performance/examples/pushdown-max.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-min.jsonc b/modules/performance/examples/pushdown-min.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-min.jsonc rename to modules/performance/examples/pushdown-min.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-page-1.jsonc b/modules/performance/examples/pushdown-page-1.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-page-1.jsonc rename to modules/performance/examples/pushdown-page-1.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-page-2.jsonc b/modules/performance/examples/pushdown-page-2.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-page-2.jsonc rename to modules/performance/examples/pushdown-page-2.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-page-3.jsonc b/modules/performance/examples/pushdown-page-3.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-page-3.jsonc rename to modules/performance/examples/pushdown-page-3.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-simple.jsonc b/modules/performance/examples/pushdown-simple.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-simple.jsonc rename to modules/performance/examples/pushdown-simple.jsonc diff --git a/modules/learn/examples/services-and-indexes/indexes/pushdown-skip.jsonc b/modules/performance/examples/pushdown-skip.jsonc similarity index 100% rename from modules/learn/examples/services-and-indexes/indexes/pushdown-skip.jsonc rename to modules/performance/examples/pushdown-skip.jsonc From f92ca60692d198210554c7c72a136a0a9ad0012c Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:44:18 +0100 Subject: [PATCH 06/23] Move images to Indexes --- .../images}/index-lifecycle-build.png | Bin .../images}/index-lifecycle-scan.png | Bin .../images}/index-lifecycle-update-1.png | Bin .../images}/index-lifecycle-update-2.png | Bin 4 files changed, 0 insertions(+), 0 deletions(-) rename modules/{learn/assets/images/services-and-indexes/indexes => indexes/images}/index-lifecycle-build.png (100%) rename modules/{learn/assets/images/services-and-indexes/indexes => indexes/images}/index-lifecycle-scan.png (100%) rename modules/{learn/assets/images/services-and-indexes/indexes => indexes/images}/index-lifecycle-update-1.png (100%) rename modules/{learn/assets/images/services-and-indexes/indexes => indexes/images}/index-lifecycle-update-2.png (100%) diff --git a/modules/learn/assets/images/services-and-indexes/indexes/index-lifecycle-build.png b/modules/indexes/images/index-lifecycle-build.png similarity index 100% rename from modules/learn/assets/images/services-and-indexes/indexes/index-lifecycle-build.png rename to modules/indexes/images/index-lifecycle-build.png diff --git a/modules/learn/assets/images/services-and-indexes/indexes/index-lifecycle-scan.png b/modules/indexes/images/index-lifecycle-scan.png similarity index 100% rename from modules/learn/assets/images/services-and-indexes/indexes/index-lifecycle-scan.png rename to modules/indexes/images/index-lifecycle-scan.png diff --git a/modules/learn/assets/images/services-and-indexes/indexes/index-lifecycle-update-1.png b/modules/indexes/images/index-lifecycle-update-1.png similarity index 100% rename from modules/learn/assets/images/services-and-indexes/indexes/index-lifecycle-update-1.png rename to modules/indexes/images/index-lifecycle-update-1.png diff --git a/modules/learn/assets/images/services-and-indexes/indexes/index-lifecycle-update-2.png b/modules/indexes/images/index-lifecycle-update-2.png similarity index 100% rename from modules/learn/assets/images/services-and-indexes/indexes/index-lifecycle-update-2.png rename to modules/indexes/images/index-lifecycle-update-2.png From eefa92c402a52345a6ec798e39f919e589807323 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:44:34 +0100 Subject: [PATCH 07/23] Move images to Performance --- .../images}/IndexKeyOrder.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename modules/{learn/assets/images/services-and-indexes/indexes => performance/images}/IndexKeyOrder.png (100%) diff --git a/modules/learn/assets/images/services-and-indexes/indexes/IndexKeyOrder.png b/modules/performance/images/IndexKeyOrder.png similarity index 100% rename from modules/learn/assets/images/services-and-indexes/indexes/IndexKeyOrder.png rename to modules/performance/images/IndexKeyOrder.png From cde134bb9c747f317f49c99944d2268dfa3ba7e9 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:49:28 +0100 Subject: [PATCH 08/23] Move indexes concept doc back to docs-server --- .../services-and-indexes/indexes/indexes.adoc | 43 ------------------- 1 file changed, 43 deletions(-) delete mode 100644 modules/learn/pages/services-and-indexes/indexes/indexes.adoc diff --git a/modules/learn/pages/services-and-indexes/indexes/indexes.adoc b/modules/learn/pages/services-and-indexes/indexes/indexes.adoc deleted file mode 100644 index e0c40297d..000000000 --- a/modules/learn/pages/services-and-indexes/indexes/indexes.adoc +++ /dev/null @@ -1,43 +0,0 @@ -= Indexes -:description: Couchbase Server indexes enhance the performance of query and search operations. -:page-aliases: understanding-couchbase:services-and-indexes/indexes/indexes,concepts:indexing - -[abstract] -{description} - -_Indexes_ are used by certain services, such as _Query_, _Analytics_, and _Search_, as targets for search-routines. -Each index makes a predefined subset of data available for the search. - -The _Query_ service relies on indexes provided by the _Index_ service. -The _Search_ and _Analytics_ services both provide their own indexes, internally. - -Indexes, when well-designed, provide significant enhancements to the performance of search-operations. - -== Indexes - -The following forms of index are available: - -Primary:: Provided by the xref:services-and-indexes/services/index-service.adoc[Index Service], this is based on the unique key of every item in a specified collection. -Every primary index is maintained asynchronously. -A primary index is intended to be used for simple queries, which have no filters or predicates. -For information on primary indexes, see xref:services-and-indexes/indexes/global-secondary-indexes.adoc[Using Indexes]. - -Secondary:: Provided by the xref:services-and-indexes/services/index-service.adoc[Index Service], this is based on an attribute _within_ a document. -The value associated with the attribute can be of any type: scalar, object, or array. -+ -A Secondary Index is frequently referred to as a _Global Secondary Index_, or _GSI_. -This is the kind of index used most frequently in Couchbase Server, for queries performed with {sqlpp}. -For information on Global Secondary Indexes, see xref:services-and-indexes/indexes/global-secondary-indexes.adoc[Using Indexes]. - -Full Text:: Provided by the xref:services-and-indexes/services/search-service.adoc[Search Service], this is a specially purposed index, which contains targets derived from the textual contents of documents within one or more specified keyspaces. -Text-matches of different degrees of exactitude can be searched for. -Both input and target text-values can be purged of irrelevant characters (such as punctuation marks or html tags). -For information on how to create Full Text Indexes, see xref:fts:fts-creating-indexes.adoc[Creating Indexes]. - -Analytics:: Provided by the xref:services-and-indexes/services/analytics-service.adoc[Analytics Service], this is a materialized access path for the shadow data in an Analytics collection. -Analytics indexes can be used to speed up Analytics selection queries and join queries. -If changes in operational data result in corresponding modifications to shadow data, Analytics indexes are updated automatically. -See the section on xref:analytics:7_using_index.adoc[Using Indexes] in Couchbase Analytics. - -View:: Supports xref:learn:views/views-intro.adoc[Couchbase Views], with fields and information extracted from documents. -Views are deprecated in Couchbase Server 7.0, and will be removed in a future release. From ebb87ac09dfca0ad70bef7524b351ce2dfb502cf Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 15:51:52 +0100 Subject: [PATCH 09/23] Remove unused image files --- .../indexes/query_execution.png | Bin 49742 -> 0 bytes .../indexes/query_service.svg | 250 ------------------ 2 files changed, 250 deletions(-) delete mode 100644 modules/learn/assets/images/services-and-indexes/indexes/query_execution.png delete mode 100644 modules/learn/assets/images/services-and-indexes/indexes/query_service.svg diff --git a/modules/learn/assets/images/services-and-indexes/indexes/query_execution.png b/modules/learn/assets/images/services-and-indexes/indexes/query_execution.png deleted file mode 100644 index e76da2b70d35c17ed2b39a2c53b33625ecf3bf96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49742 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 U0imBh;%^eFCr&G7%A4Q%KZFaqg8%>k diff --git a/modules/learn/assets/images/services-and-indexes/indexes/query_service.svg b/modules/learn/assets/images/services-and-indexes/indexes/query_service.svg deleted file mode 100644 index ff2611d6f..000000000 --- a/modules/learn/assets/images/services-and-indexes/indexes/query_service.svg +++ /dev/null @@ -1,250 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Parse - - - Plan - - - Scan - - - Fetch - - - Join - - - Sort - - - Offset - - - Limit - - - Project - - - Filter - - - Pre-Aggregate - - - Aggregate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Client - - - Query Service - - - - Index Service - - - - Data Service - - - - - - - - - - - - - - - - \ No newline at end of file From 6cacbff3052834d16326858d21221ec18ef5ad51 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 16:01:48 +0100 Subject: [PATCH 10/23] Update page aliases --- modules/indexes/pages/index-lifecycle.adoc | 1 + modules/indexes/pages/index-replication.adoc | 2 +- modules/indexes/pages/indexing-overview.adoc | 2 +- modules/indexes/pages/storage-modes.adoc | 2 +- modules/performance/pages/early-filters-and-pagination.adoc | 1 + modules/performance/pages/index-scans.adoc | 2 +- modules/performance/pages/index_pushdowns.adoc | 2 +- modules/performance/pages/indexing-and-query-perf.adoc | 2 +- modules/performance/pages/query-without-index.adoc | 1 + 9 files changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/indexes/pages/index-lifecycle.adoc b/modules/indexes/pages/index-lifecycle.adoc index a794bb84a..326a72347 100644 --- a/modules/indexes/pages/index-lifecycle.adoc +++ b/modules/indexes/pages/index-lifecycle.adoc @@ -1,5 +1,6 @@ = Index Lifecycle :page-topic-type: concept +:page-aliases: learn:services-and-indexes/indexes/index-lifecycle :imagesdir: ../../../assets/images :description: An overview of the lifecycle of a Global Secondary Index, from creation and building to updates and scans. diff --git a/modules/indexes/pages/index-replication.adoc b/modules/indexes/pages/index-replication.adoc index e05a42aef..6f6ad5916 100644 --- a/modules/indexes/pages/index-replication.adoc +++ b/modules/indexes/pages/index-replication.adoc @@ -3,7 +3,7 @@ :description: The Index Service ensures availability and performance through replication and partitioning. :page-topic-type: concept :page-partial: -:page-aliases: indexes:index-replication,indexes:performance-consistency,understanding-couchbase:services-and-indexes/indexes/index-replication +:page-aliases: learn:services-and-indexes/indexes/index-replication,indexes:performance-consistency,understanding-couchbase:services-and-indexes/indexes/index-replication :keywords: consistency, consistent // Cross-references diff --git a/modules/indexes/pages/indexing-overview.adoc b/modules/indexes/pages/indexing-overview.adoc index affab2f29..5e3e58241 100644 --- a/modules/indexes/pages/indexing-overview.adoc +++ b/modules/indexes/pages/indexing-overview.adoc @@ -1,5 +1,5 @@ = Primary and Secondary Index Reference -:page-aliases: indexes:indexing-overview,understanding-couchbase:services-and-indexes/indexes/global-secondary-indexes,indexes:gsi-for-n1ql,architecture:global-secondary-indexes,architecture:gsi-versus-views +:page-aliases: learn:services-and-indexes/indexes/global-secondary-indexes,understanding-couchbase:services-and-indexes/indexes/global-secondary-indexes,indexes:gsi-for-n1ql,architecture:global-secondary-indexes,architecture:gsi-versus-views :page-role: tiles -toc :!sectids: :description: Primary Indexes and Global Secondary Indexes (GSI) support queries made by the Query Service. diff --git a/modules/indexes/pages/storage-modes.adoc b/modules/indexes/pages/storage-modes.adoc index bca743148..258a7c09c 100644 --- a/modules/indexes/pages/storage-modes.adoc +++ b/modules/indexes/pages/storage-modes.adoc @@ -2,7 +2,7 @@ :navtitle: Storage Settings :description: A Secondary Index can be saved in either of two ways: memory-optimized or standard. :page-topic-type: concept -:page-aliases: indexes:storage-modes,understanding-couchbase:services-and-indexes/indexes/storage-modes,architecture:index-storage +:page-aliases: learn:services-and-indexes/indexes/storage-modes,understanding-couchbase:services-and-indexes/indexes/storage-modes,architecture:index-storage [abstract] A Secondary Index can be saved in either of two ways: _memory-optimized_ or _standard_. diff --git a/modules/performance/pages/early-filters-and-pagination.adoc b/modules/performance/pages/early-filters-and-pagination.adoc index 820542a57..8c328b3ea 100644 --- a/modules/performance/pages/early-filters-and-pagination.adoc +++ b/modules/performance/pages/early-filters-and-pagination.adoc @@ -1,5 +1,6 @@ = Early Filters, Order, and Pagination :page-topic-type: concept +:page-aliases: learn:services-and-indexes/indexes/early-filters-and-pagination :description: When covering indexes and index pushdowns are not available, the Query Service may use early filtering, early ordering, and early pagination to improve the query response time. [abstract] diff --git a/modules/performance/pages/index-scans.adoc b/modules/performance/pages/index-scans.adoc index f2e24dd26..07053be45 100644 --- a/modules/performance/pages/index-scans.adoc +++ b/modules/performance/pages/index-scans.adoc @@ -1,7 +1,7 @@ = Index Scans :description: This section discusses how index spans are generated from query predicates and provides a number of examples. :page-topic-type: concept -:page-aliases: performance:index-scans +:page-aliases: learn:services-and-indexes/indexes/index-scans :imagesdir: ../../../assets/images [abstract] diff --git a/modules/performance/pages/index_pushdowns.adoc b/modules/performance/pages/index_pushdowns.adoc index d0cad7db7..753a0c55d 100644 --- a/modules/performance/pages/index_pushdowns.adoc +++ b/modules/performance/pages/index_pushdowns.adoc @@ -2,7 +2,7 @@ :description: Index Pushdowns are performance optimizations where the Query engine pushes more of the work down to the Indexer. :imagesdir: ../../../assets/images :page-topic-type: concept -:page-aliases: performance:index_pushdowns +:page-aliases: learn:services-and-indexes/indexes/index_pushdowns [abstract] {description} diff --git a/modules/performance/pages/indexing-and-query-perf.adoc b/modules/performance/pages/indexing-and-query-perf.adoc index dbfa107e6..6841aa694 100644 --- a/modules/performance/pages/indexing-and-query-perf.adoc +++ b/modules/performance/pages/indexing-and-query-perf.adoc @@ -2,7 +2,7 @@ :navtitle: Types of Index :description: This topic provides an overview of the types of index that you can create using the Index Service, and explains how they help to query for data efficiently and improve query performance. :page-topic-type: concept -:page-aliases: performance:indexing-and-query-perf +:page-aliases: learn:services-and-indexes/indexes/indexing-and-query-perf // Cross-references :install-sample-buckets: xref:manage:manage-settings/install-sample-buckets.adoc diff --git a/modules/performance/pages/query-without-index.adoc b/modules/performance/pages/query-without-index.adoc index 3d10c36e6..e071677b8 100644 --- a/modules/performance/pages/query-without-index.adoc +++ b/modules/performance/pages/query-without-index.adoc @@ -1,5 +1,6 @@ = Query without Indexes :page-topic-type: concept +:page-aliases: learn:services-and-indexes/indexes/query-without-index :description: Sequential scans enable you to query a keyspace, even if the keyspace has no indexes. :authorization-overview: xref:learn:security/authorization-overview.adoc From cdf070cdde53cb0669738292e7240037d7be508d Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 16:27:01 +0100 Subject: [PATCH 11/23] Update links to GSI pages --- modules/guides/pages/create-index.adoc | 2 +- modules/guides/pages/defer-index.adoc | 2 +- modules/guides/pages/drop-index.adoc | 2 +- modules/guides/pages/index-advisor.adoc | 2 +- modules/guides/pages/place-index.adoc | 4 ++-- modules/guides/pages/select-index.adoc | 2 +- modules/indexes/pages/index-lifecycle.adoc | 2 +- modules/indexes/pages/indexing-overview.adoc | 16 ++++++++-------- .../pages/n1ql-intro/queriesandresults.adoc | 2 +- .../adaptive-indexing.adoc | 2 +- .../pages/n1ql-language-reference/advise.adoc | 2 +- .../covering-indexes.adoc | 6 +++--- .../n1ql-language-reference/createindex.adoc | 4 ++-- .../createprimaryindex.adoc | 2 +- .../n1ql-language-reference/flex-indexes.adoc | 2 +- .../groupby-aggregate-performance.adoc | 6 +++--- .../updatestatistics.adoc | 2 +- modules/n1ql/pages/query.adoc | 2 +- modules/n1ql/partials/nav.adoc | 18 +++++++++--------- .../pages/early-filters-and-pagination.adoc | 6 +++--- modules/performance/pages/index_pushdowns.adoc | 8 ++++---- .../pages/indexing-and-query-perf.adoc | 2 +- 22 files changed, 48 insertions(+), 48 deletions(-) diff --git a/modules/guides/pages/create-index.adoc b/modules/guides/pages/create-index.adoc index d3a2d1e2a..e7364cb5d 100644 --- a/modules/guides/pages/create-index.adoc +++ b/modules/guides/pages/create-index.adoc @@ -548,7 +548,7 @@ For further details and examples, refer to xref:n1ql:n1ql-language-reference/cov Reference and explanation: -* xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[Using Indexes] +* xref:indexes:indexing-overview.adoc[] Administrator guides: diff --git a/modules/guides/pages/defer-index.adoc b/modules/guides/pages/defer-index.adoc index c87ae0b18..d1fcb63e0 100644 --- a/modules/guides/pages/defer-index.adoc +++ b/modules/guides/pages/defer-index.adoc @@ -302,7 +302,7 @@ For further details, refer to https://docs.couchbase.com/sdk-api/couchbase-pytho Reference and explanation: -* xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[Using Indexes] +* xref:indexes:indexing-overview.adoc[] Administrator guides: diff --git a/modules/guides/pages/drop-index.adoc b/modules/guides/pages/drop-index.adoc index 232b2006c..7a3a1ebc5 100644 --- a/modules/guides/pages/drop-index.adoc +++ b/modules/guides/pages/drop-index.adoc @@ -335,7 +335,7 @@ For further details, refer to https://docs.couchbase.com/sdk-api/couchbase-pytho Reference and explanation: -* xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[Using Indexes] +* xref:indexes:indexing-overview.adoc[] Administrator guides: diff --git a/modules/guides/pages/index-advisor.adoc b/modules/guides/pages/index-advisor.adoc index 84a5c79c2..da6ddfb53 100644 --- a/modules/guides/pages/index-advisor.adoc +++ b/modules/guides/pages/index-advisor.adoc @@ -231,7 +231,7 @@ For more details, refer to xref:n1ql:n1ql-language-reference/advisor.adoc#adviso Reference and explanation: -* xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[Using Indexes] +* xref:indexes:indexing-overview.adoc[] Administrator guides: diff --git a/modules/guides/pages/place-index.adoc b/modules/guides/pages/place-index.adoc index 01963bab8..6c664d466 100644 --- a/modules/guides/pages/place-index.adoc +++ b/modules/guides/pages/place-index.adoc @@ -132,7 +132,7 @@ include::learn:example$services-and-indexes/indexes/replication-nodes.n1ql[] NOTE: If you specify both `num_replica` _and_ `nodes`, the number of nodes must be _one greater_ than the number of replicas. -For further details and examples, refer to xref:learn:services-and-indexes/indexes/index-replication.adoc#index-replication[Index Replication]. +For further details and examples, refer to xref:indexes:index-replication.adoc#index-replication[Index Replication]. == Altering Index Placement @@ -166,7 +166,7 @@ For further details and examples, refer to xref:n1ql:n1ql-language-reference/alt Reference and explanation: -* xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[Using Indexes] +* xref:indexes:indexing-overview.adoc[Using Indexes] Administrator guides: diff --git a/modules/guides/pages/select-index.adoc b/modules/guides/pages/select-index.adoc index 590854426..d3edd9579 100644 --- a/modules/guides/pages/select-index.adoc +++ b/modules/guides/pages/select-index.adoc @@ -81,7 +81,7 @@ For further details and examples, refer to xref:n1ql:n1ql-language-reference/key Reference and explanation: -* xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[Using Indexes] +* xref:indexes:indexing-overview.adoc[] * xref:n1ql:n1ql-language-reference/selectintro.adoc[SELECT] * xref:n1ql:n1ql-language-reference/optimizer-hints.adoc[Hints] diff --git a/modules/indexes/pages/index-lifecycle.adoc b/modules/indexes/pages/index-lifecycle.adoc index 326a72347..764ed4502 100644 --- a/modules/indexes/pages/index-lifecycle.adoc +++ b/modules/indexes/pages/index-lifecycle.adoc @@ -61,4 +61,4 @@ image::services-and-indexes/indexes/index-lifecycle-scan.png[align=center] The scan coordinator does not need to wait for indexes on other collections to be updated, even if documents in other collections are being mutated. -Refer to xref:learn:services-and-indexes/indexes/index-scans.adoc[Index Scans] and xref:learn:services-and-indexes/indexes/index-replication.adoc#index-consistency[Index Consistency] for further details. \ No newline at end of file +Refer to xref:performance:index-scans.adoc[Index Scans] and xref:indexes:index-replication.adoc#index-consistency[Index Consistency] for further details. \ No newline at end of file diff --git a/modules/indexes/pages/indexing-overview.adoc b/modules/indexes/pages/indexing-overview.adoc index 5e3e58241..09fde3a18 100644 --- a/modules/indexes/pages/indexing-overview.adoc +++ b/modules/indexes/pages/indexing-overview.adoc @@ -22,14 +22,14 @@ endif::[] == Tuning and Query Performance -* xref:learn:services-and-indexes/indexes/query-without-index.adoc[] -* xref:learn:services-and-indexes/indexes/index-lifecycle.adoc[] -* xref:learn:services-and-indexes/indexes/indexing-and-query-perf.adoc[] +* xref:performance:query-without-index.adoc[] +* xref:indexes:index-lifecycle.adoc[] +* xref:performance:indexing-and-query-perf.adoc[] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[] -* xref:learn:services-and-indexes/indexes/index-scans.adoc[] -* xref:learn:services-and-indexes/indexes/index_pushdowns.adoc[] +* xref:performance:index-scans.adoc[] +* xref:performance:index_pushdowns.adoc[] * xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[] -* xref:learn:services-and-indexes/indexes/early-filters-and-pagination.adoc[] +* xref:performance:early-filters-and-pagination.adoc[] == Index Commands @@ -43,8 +43,8 @@ endif::[] == Storage and Availability -* xref:learn:services-and-indexes/indexes/index-replication.adoc[] -* xref:learn:services-and-indexes/indexes/storage-modes.adoc[] +* xref:indexes:index-replication.adoc[] +* xref:indexes:storage-modes.adoc[] == Related Links diff --git a/modules/n1ql/pages/n1ql-intro/queriesandresults.adoc b/modules/n1ql/pages/n1ql-intro/queriesandresults.adoc index c61da6b43..339b362f7 100644 --- a/modules/n1ql/pages/n1ql-intro/queriesandresults.adoc +++ b/modules/n1ql/pages/n1ql-intro/queriesandresults.adoc @@ -227,4 +227,4 @@ For example, creating a secondary index on the `name` and `email` fields in the Note that you do not need to create an index on a keyspace to be able to query that keyspace. If no indexes exist on a keyspace, Couchbase Server uses a sequential scan to query that index. -For more information, refer to xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[]. +For more information, refer to xref:indexes:indexing-overview.adoc[]. diff --git a/modules/n1ql/pages/n1ql-language-reference/adaptive-indexing.adoc b/modules/n1ql/pages/n1ql-language-reference/adaptive-indexing.adoc index dc69513f9..21ae721df 100644 --- a/modules/n1ql/pages/n1ql-language-reference/adaptive-indexing.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/adaptive-indexing.adoc @@ -6,7 +6,7 @@ :createindex: xref:n1ql-language-reference/createindex.adoc :install-sample-buckets: xref:manage:manage-settings/install-sample-buckets.adoc :indexing-arrays: xref:n1ql-language-reference/indexing-arrays.adoc -:partial-index: xref:learn:services-and-indexes/indexes/indexing-and-query-perf.adoc#partial-index +:partial-index: xref:performance:indexing-and-query-perf.adoc#partial-index {description} Such an index is generic in nature, and it can efficiently index and lookup any of the index-key values. diff --git a/modules/n1ql/pages/n1ql-language-reference/advise.adoc b/modules/n1ql/pages/n1ql-language-reference/advise.adoc index 1f8e6c043..be271dbb0 100644 --- a/modules/n1ql/pages/n1ql-language-reference/advise.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/advise.adoc @@ -27,7 +27,7 @@ :aggregate-quantifier: {n1ql}/aggregatefun.adoc#aggregate-quantifier // Indexing and Query Performance cross-references -:indexing-and-query-perf: xref:learn:services-and-indexes/indexes/indexing-and-query-perf.adoc +:indexing-and-query-perf: xref:performance:indexing-and-query-perf.adoc :secondary-index: {indexing-and-query-perf}#secondary-index :partial-index: {indexing-and-query-perf}#partial-index :array-index: {indexing-and-query-perf}#array-index diff --git a/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc b/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc index 73c923bb7..c1dd811e3 100644 --- a/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc @@ -467,7 +467,7 @@ The query plan for the above query shows that the index covers the query. == Related Links -* xref:learn:services-and-indexes/indexes/index-scans.adoc#query-execution-details[Query Execution: Details] -* xref:learn:services-and-indexes/indexes/index_pushdowns.adoc[Index Pushdown Optimizations] +* xref:performance:index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:performance:index_pushdowns.adoc[Index Pushdown Optimizations] * xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] -* xref:learn:services-and-indexes/indexes/early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:performance:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] diff --git a/modules/n1ql/pages/n1ql-language-reference/createindex.adoc b/modules/n1ql/pages/n1ql-language-reference/createindex.adoc index 22511f7dc..a859ad2e7 100644 --- a/modules/n1ql/pages/n1ql-language-reference/createindex.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/createindex.adoc @@ -6,7 +6,7 @@ Secondary indexes contain a filtered or a full set of keys in a given keyspace. :authorization-overview: xref:learn:security/authorization-overview.adoc -:index-replication: xref:learn:services-and-indexes/indexes/index-replication.adoc#index-replication +:index-replication: xref:indexes:index-replication.adoc#index-replication :console-indexes: xref:manage:manage-ui/manage-ui.adoc#console-indexes :query-context: xref:n1ql:n1ql-intro/queriesandresults.adoc#query-context :build-index: xref:n1ql-language-reference/build-index.adoc @@ -16,7 +16,7 @@ Secondary indexes contain a filtered or a full set of keys in a given keyspace. :indexing-arrays: xref:n1ql-language-reference/indexing-arrays.adoc :index-partitioning: xref:n1ql-language-reference/index-partitioning.adoc :indexing-meta-info: xref:n1ql-language-reference/indexing-meta-info.adoc -:operator-pushdowns: xref:learn:services-and-indexes/indexes/index_pushdowns.adoc#operator-pushdowns +:operator-pushdowns: xref:performance:index_pushdowns.adoc#operator-pushdowns :logical-hierarchy: xref:n1ql:n1ql-intro/queriesandresults.adoc#logical-hierarchy :querying-indexes: xref:n1ql-intro/sysinfo.adoc#querying-indexes diff --git a/modules/n1ql/pages/n1ql-language-reference/createprimaryindex.adoc b/modules/n1ql/pages/n1ql-language-reference/createprimaryindex.adoc index 5013f3b2b..aa75fab1b 100644 --- a/modules/n1ql/pages/n1ql-language-reference/createprimaryindex.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/createprimaryindex.adoc @@ -11,7 +11,7 @@ Primary indexes contain a full set of keys in a given keyspace. :query-context: xref:n1ql:n1ql-intro/queriesandresults.adoc#query-context :logical-hierarchy: xref:n1ql-intro/queriesandresults.adoc#logical-hierarchy :querying-indexes: xref:n1ql-intro/sysinfo.adoc#querying-indexes -:index-replication: xref:learn:services-and-indexes/indexes/index-replication.adoc#index-replication +:index-replication: xref:indexes:index-replication.adoc#index-replication :query-settings: xref:manage:manage-settings/query-settings.adoc // TEMP diff --git a/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc b/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc index bb4cf5fa2..aeeda84af 100644 --- a/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc @@ -19,7 +19,7 @@ :inserting-a-child-field: xref:fts:fts-creating-indexes.adoc#inserting-a-child-field :pre-constructed-analyzers: xref:fts:fts-using-analyzers.adoc#pre-constructed-analyzers :simple-queries: xref:fts:fts-query-types.adoc#simple-queries -:index_pushdowns: xref:learn:services-and-indexes/indexes/index_pushdowns.adoc +:index_pushdowns: xref:performance:index_pushdowns.adoc [abstract] {description} diff --git a/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc b/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc index db9f3035a..31af9d4fb 100644 --- a/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc @@ -2627,7 +2627,7 @@ Key Position to use the Index expr or the query expr. == Related Links -* xref:learn:services-and-indexes/indexes/index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:performance:index-scans.adoc#query-execution-details[Query Execution: Details] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] -* xref:learn:services-and-indexes/indexes/index_pushdowns.adoc[Index Pushdown Optimizations] -* xref:learn:services-and-indexes/indexes/early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:performance:index_pushdowns.adoc[Index Pushdown Optimizations] +* xref:performance:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] diff --git a/modules/n1ql/pages/n1ql-language-reference/updatestatistics.adoc b/modules/n1ql/pages/n1ql-language-reference/updatestatistics.adoc index db57dd618..590ad2576 100644 --- a/modules/n1ql/pages/n1ql-language-reference/updatestatistics.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/updatestatistics.adoc @@ -97,7 +97,7 @@ If an index has a memory-resident ratio of zero, then the statement returns the Depending on the index storage settings, if an index has been scanned recently, it is more likely to be memory-resident; whereas if an index is not used for a long while, then it is more likely to be ejected from memory. You may be able to improve the memory-resident ratio for an index (and avoid error 5390) by running one or more queries which use that index. -For further details, refer to xref:learn:services-and-indexes/indexes/storage-modes.adoc[Storage Settings]. +For further details, refer to xref:indexes:storage-modes.adoc[Storage Settings]. == Optimizer Statistics diff --git a/modules/n1ql/pages/query.adoc b/modules/n1ql/pages/query.adoc index 4d0f818b2..67fbb82c6 100644 --- a/modules/n1ql/pages/query.adoc +++ b/modules/n1ql/pages/query.adoc @@ -63,7 +63,7 @@ Based on SQL, it's immediately familiar to developers who can quickly start deve == Query References * xref:n1ql:n1ql-language-reference/index.adoc[] -* xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[] +* xref:indexes:indexing-overview.adoc[] * xref:javascript-udfs:javascript-functions-with-couchbase.adoc[] == Related Links diff --git a/modules/n1ql/partials/nav.adoc b/modules/n1ql/partials/nav.adoc index 108680045..44be9171f 100644 --- a/modules/n1ql/partials/nav.adoc +++ b/modules/n1ql/partials/nav.adoc @@ -149,17 +149,17 @@ **** xref:n1ql:n1ql-language-reference/upsert.adoc[] *** xref:n1ql:n1ql-language-reference/n1ql-auditing.adoc[] *** xref:n1ql:n1ql-language-reference/n1ql-error-codes.adoc[] - ** xref:learn:services-and-indexes/indexes/global-secondary-indexes.adoc[] - *** xref:learn:services-and-indexes/indexes/query-without-index.adoc[] - *** xref:learn:services-and-indexes/indexes/index-lifecycle.adoc[] - *** xref:learn:services-and-indexes/indexes/indexing-and-query-perf.adoc[] + ** xref:indexes:indexing-overview.adoc[] + *** xref:performance:query-without-index.adoc[] + *** xref:indexes:index-lifecycle.adoc[] + *** xref:performance:indexing-and-query-perf.adoc[] *** xref:n1ql:n1ql-language-reference/covering-indexes.adoc[] - *** xref:learn:services-and-indexes/indexes/index-scans.adoc[] - *** xref:learn:services-and-indexes/indexes/index_pushdowns.adoc[] + *** xref:performance:index-scans.adoc[] + *** xref:performance:index_pushdowns.adoc[] *** xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[] - *** xref:learn:services-and-indexes/indexes/early-filters-and-pagination.adoc[] - *** xref:learn:services-and-indexes/indexes/index-replication.adoc[] - *** xref:learn:services-and-indexes/indexes/storage-modes.adoc[] + *** xref:performance:early-filters-and-pagination.adoc[] + *** xref:indexes:index-replication.adoc[] + *** xref:indexes:storage-modes.adoc[] ** xref:javascript-udfs:javascript-functions-with-couchbase.adoc[] *** xref:tools:udfs-ui.adoc[] *** xref:javascript-udfs:calling-javascript-from-n1ql.adoc[] diff --git a/modules/performance/pages/early-filters-and-pagination.adoc b/modules/performance/pages/early-filters-and-pagination.adoc index 8c328b3ea..3d8f3f9d8 100644 --- a/modules/performance/pages/early-filters-and-pagination.adoc +++ b/modules/performance/pages/early-filters-and-pagination.adoc @@ -104,7 +104,7 @@ Any feature that can reduce the amount of data to be fetched will improve the qu It would obviously be inefficient to fetch an entire dataset, and then discard a large portion of it by applying filters and pagination. Couchbase Server therefore attempts to apply filters, order, and pagination _before_ fetching data, wherever possible. -Index xref:learn:services-and-indexes/indexes/index_pushdowns.adoc[pushdowns] provide one way to reduce the amount of data to be fetched. +Index xref:performance:index_pushdowns.adoc[pushdowns] provide one way to reduce the amount of data to be fetched. Some filters, ordering, and pagination may be pushed down to the Index service, along with grouping and aggregates. The Index service applies these operations to the result of the index scan. The Query service then only needs to fetch the remaining data. @@ -487,9 +487,9 @@ NOTE: An uncovered query may use a mixture of these methods. == Related Links -* xref:learn:services-and-indexes/indexes/index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:performance:index-scans.adoc#query-execution-details[Query Execution: Details] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] -* xref:learn:services-and-indexes/indexes/index_pushdowns.adoc[Index Pushdown Optimizations] +* xref:performance:index_pushdowns.adoc[Index Pushdown Optimizations] * xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] * xref:n1ql:n1ql-language-reference/where.adoc[WHERE Clause] -- to apply a filter * xref:n1ql:n1ql-language-reference/orderby.adoc[ORDER BY Clause] -- to apply a sort diff --git a/modules/performance/pages/index_pushdowns.adoc b/modules/performance/pages/index_pushdowns.adoc index 753a0c55d..389d1adcf 100644 --- a/modules/performance/pages/index_pushdowns.adoc +++ b/modules/performance/pages/index_pushdowns.adoc @@ -100,7 +100,7 @@ include::example$services-and-indexes/indexes/pushdown-simple.jsonc[tag=predicat * Each Span defines details about one index-key summarizing corresponding predicate conditions into a range-scan lookup for the index. In this example, the predicate condition (`sourceairport = "SFO"`) translates to one span with one range that specifies both `low` and `high` values of "SFO" (to imply equals condition). -* Refer to section xref:learn:services-and-indexes/indexes/index-scans.adoc[Scans] for more information. +* Refer to section xref:performance:index-scans.adoc[Scans] for more information. ==== == Composite Predicate Pushdown @@ -108,7 +108,7 @@ In this example, the predicate condition (`sourceairport = "SFO"`) translates to Compound or composite predicates are those with multiple conditions on different fields of the document. When the predicate is conjunctive with multiple AND conditions, then a single `span` with multiple `ranges` are specified in the index-scan request. When the predicate is disjunctive, then multiple `spans` are specified. -See xref:learn:services-and-indexes/indexes/index-scans.adoc[Scans] +See xref:performance:index-scans.adoc[Scans] for more details and examples on how predicate pushdown works for various types of index-scans as well as the conjunctive predicate AND and the disjunctive predicate OR. === Index Key Order and Structure @@ -632,7 +632,7 @@ include::example$services-and-indexes/indexes/pushdown-distinct.jsonc[tag=excerp == Related Links -* xref:learn:services-and-indexes/indexes/index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:performance:index-scans.adoc#query-execution-details[Query Execution: Details] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] * xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] -* xref:learn:services-and-indexes/indexes/early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:performance:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] diff --git a/modules/performance/pages/indexing-and-query-perf.adoc b/modules/performance/pages/indexing-and-query-perf.adoc index 6841aa694..ae9c4b4ee 100644 --- a/modules/performance/pages/indexing-and-query-perf.adoc +++ b/modules/performance/pages/indexing-and-query-perf.adoc @@ -10,7 +10,7 @@ :indexing-arrays: xref:n1ql:n1ql-language-reference/indexing-arrays.adoc :covering-indexes: xref:n1ql:n1ql-language-reference/covering-indexes.adoc :bucket-analyzer: xref:tools:query-workbench.adoc#bucket-analyzer -:storage-modes: xref:learn:services-and-indexes/indexes/storage-modes.adoc +:storage-modes: xref:indexes:storage-modes.adoc :additional-storage-use: xref:learn:data/transactions.adoc#additional-storage-use Creating the right index -- with the right keys, in the right order, and using the right expressions -- is critical to query performance in any database system. From 6cf0829287814c5899e04c1d7298d97ec72ed2d4 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 16:45:09 +0100 Subject: [PATCH 12/23] Update coordinates of example files --- modules/guides/pages/create-index.adoc | 8 ++-- modules/guides/pages/place-index.adoc | 4 +- modules/indexes/pages/index-replication.adoc | 4 +- .../pages/early-filters-and-pagination.adoc | 36 +++++++-------- .../performance/pages/index_pushdowns.adoc | 46 +++++++++---------- .../pages/indexing-and-query-perf.adoc | 8 ++-- 6 files changed, 53 insertions(+), 53 deletions(-) diff --git a/modules/guides/pages/create-index.adoc b/modules/guides/pages/create-index.adoc index e7364cb5d..ea07e5bc6 100644 --- a/modules/guides/pages/create-index.adoc +++ b/modules/guides/pages/create-index.adoc @@ -254,7 +254,7 @@ The following query creates a secondary index on an expression using the `name` [source,sqlpp] ---- -include::learn:example$services-and-indexes/indexes/create-idx-expr.n1ql[] +include::performance:example$create-idx-expr.n1ql[] ---- For further details and examples, refer to xref:n1ql:n1ql-language-reference/createindex.adoc[CREATE INDEX]. @@ -384,7 +384,7 @@ include::partial$query-context.adoc[tag=step] .Query [source,sqlpp] ---- -include::learn:example$services-and-indexes/indexes/create-idx-composite.n1ql[] +include::performance:example$create-idx-composite.n1ql[] ---- For further details and examples, refer to xref:n1ql:n1ql-language-reference/createindex.adoc[CREATE INDEX]. @@ -507,7 +507,7 @@ include::partial$query-context.adoc[tag=step] .Query [source,sqlpp] ---- -include::learn:example$services-and-indexes/indexes/create-idx-array.n1ql[] +include::performance:example$create-idx-array.n1ql[] ---- ==== @@ -528,7 +528,7 @@ include::partial$query-context.adoc[tag=step] .Query [source,sqlpp] ---- -include::learn:example$services-and-indexes/indexes/create-idx-partial.n1ql[] +include::performance:example$create-idx-partial.n1ql[] ---- ==== diff --git a/modules/guides/pages/place-index.adoc b/modules/guides/pages/place-index.adoc index 6c664d466..f34b7d549 100644 --- a/modules/guides/pages/place-index.adoc +++ b/modules/guides/pages/place-index.adoc @@ -104,7 +104,7 @@ include::partial$query-context.adoc[tag=step] .Query [source,sqlpp] ---- -include::learn:example$services-and-indexes/indexes/replication-num.n1ql[] +include::indexes:example$replication-num.n1ql[] ---- ==== @@ -126,7 +126,7 @@ include::partial$query-context.adoc[tag=step] .Query [source,sqlpp] ---- -include::learn:example$services-and-indexes/indexes/replication-nodes.n1ql[] +include::indexes:example$replication-nodes.n1ql[] ---- ==== diff --git a/modules/indexes/pages/index-replication.adoc b/modules/indexes/pages/index-replication.adoc index 6f6ad5916..f249e3cac 100644 --- a/modules/indexes/pages/index-replication.adoc +++ b/modules/indexes/pages/index-replication.adoc @@ -54,7 +54,7 @@ The active index is on `node1`, and the replicas are on `node2` and `node3`: [#nodes-example2] [source,sqlpp] ---- -include::example$services-and-indexes/indexes/replication-nodes.n1ql[] +include::example$replication-nodes.n1ql[] ---- * Specifying _no_ destination nodes; but specifying instead, by means of the `WITH` clause and the `num_replica` attribute, only the _number_ of replicas required. @@ -64,7 +64,7 @@ In the following example, an index is created with two replicas, with no destina + [source,sqlpp] ---- -include::example$services-and-indexes/indexes/replication-num.n1ql[] +include::example$replication-num.n1ql[] ---- + Note that if `nodes` and `num_replica` are both specified in the `WITH` clause, the specified number of nodes must be _one greater_ than `num_replica`. diff --git a/modules/performance/pages/early-filters-and-pagination.adoc b/modules/performance/pages/early-filters-and-pagination.adoc index 3d8f3f9d8..ba2aeb096 100644 --- a/modules/performance/pages/early-filters-and-pagination.adoc +++ b/modules/performance/pages/early-filters-and-pagination.adoc @@ -214,7 +214,7 @@ For an illustration of early filtering, consider the following index. .Index I [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-filter-idx.n1ql[] +include::example$early-filter-idx.n1ql[] ---- ==== @@ -226,7 +226,7 @@ This index contains all the data needed to perform <>; it theref .Query [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-filter-1.n1ql[] +include::example$early-filter-1.n1ql[] ---- The query plan shows that the query is covered. @@ -234,7 +234,7 @@ In addition, the predicate `city = "Paris"` is applied as a span by the Index se [source,json] ---- -include::example$services-and-indexes/indexes/early-filter-1.jsonc[tags=extract;ellipsis] +include::example$early-filter-1.jsonc[tags=extract;ellipsis] ---- <.> The `covers` section shows that the query is covered. @@ -250,7 +250,7 @@ Now the query is no longer covered, and the Query service needs to fetch documen .Query [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-filter-2.n1ql[] +include::example$early-filter-2.n1ql[] ---- This query does not run too slowly, since the predicate `city = "Paris"` is pushed down to the Index service. @@ -258,7 +258,7 @@ The index only returns document keys for documents matching the predicate. [source,json] ---- -include::example$services-and-indexes/indexes/early-filter-2.jsonc[tags=extract;ellipsis] +include::example$early-filter-2.jsonc[tags=extract;ellipsis] ---- <.> The `range` section shows that this predicate is pushed down to the Index service. @@ -273,7 +273,7 @@ Now let's consider the case when the filter is not on the index key exactly, but .Query [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-filter-3.n1ql[] +include::example$early-filter-3.n1ql[] ---- In this case, the filter cannot be pushed down to the Index service. @@ -282,7 +282,7 @@ The Query service can apply the specified filter to the results of the index sca [source,json] ---- -include::example$services-and-indexes/indexes/early-filter-3.jsonc[tags=extract;ellipsis] +include::example$early-filter-3.jsonc[tags=extract;ellipsis] ---- <.> The early index filters, including all the filters that can be evaluated on the index keys. @@ -300,7 +300,7 @@ If necessary, the Query service may use a mixture of index pushdowns and early f .Query [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-filter-4.n1ql[] +include::example$early-filter-4.n1ql[] ---- The Index service evaluates the filters used to generate the index spans first, before returning to the Query service. @@ -308,7 +308,7 @@ As a result, the early filters only contain the predicates that were not pushed [source,json] ---- -include::example$services-and-indexes/indexes/early-filter-4.jsonc[tags=extract;ellipsis] +include::example$early-filter-4.jsonc[tags=extract;ellipsis] ---- <.> The filter `name LIKE "%Paris%"` does not generate an exact index span, and needs to be evaluated as an early index filter. @@ -325,7 +325,7 @@ As an illustration, consider the following index. .Index II [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-paginate-idx.n1ql[] +include::example$early-paginate-idx.n1ql[] ---- ==== @@ -337,7 +337,7 @@ This index acts as a covering index to <>. .Query [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-paginate-1.n1ql[] +include::example$early-paginate-1.n1ql[] ---- The `covers` section of the query plan shows that the query is covered. @@ -345,7 +345,7 @@ In addition, the ordering, offset, and limit are performed by the Index service. [source,json] ---- -include::example$services-and-indexes/indexes/early-paginate-1.jsonc[tags=extract;ellipsis] +include::example$early-paginate-1.jsonc[tags=extract;ellipsis] ---- <.> Index order performed by index operator @@ -362,14 +362,14 @@ Now the query is no longer covered. .Query [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-paginate-2.n1ql[] +include::example$early-paginate-2.n1ql[] ---- However the query runs pretty quickly, since the ordering, offset, and limit can still be pushed down to the Index service. [source,json] ---- -include::example$services-and-indexes/indexes/early-paginate-2.jsonc[tags=extract;ellipsis] +include::example$early-paginate-2.jsonc[tags=extract;ellipsis] ---- <.> Index order pushdown @@ -385,14 +385,14 @@ However, if we change the order of the ordering terms so that they no longer mat .Query [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-paginate-3.n1ql[] +include::example$early-paginate-3.n1ql[] ---- So in this case, early ordering, limit, and offset are done by the Query service before fetch. [source,json] ---- -include::example$services-and-indexes/indexes/early-paginate-3.jsonc[tags=extract;ellipsis] +include::example$early-paginate-3.jsonc[tags=extract;ellipsis] ---- <.> Early ordering @@ -408,14 +408,14 @@ Similarly, if we change the direction of the sort from descending to ascending, .Query [source,sqlpp] ---- -include::example$services-and-indexes/indexes/early-paginate-4.n1ql[] +include::example$early-paginate-4.n1ql[] ---- In this case also, early ordering, limit, and offset are done by the Query service before fetch. [source,json] ---- -include::example$services-and-indexes/indexes/early-paginate-4.jsonc[tags=extract;ellipsis] +include::example$early-paginate-4.jsonc[tags=extract;ellipsis] ---- <.> The `sort_terms` section uses `_index_key` expressions to sort the results using the index keys. diff --git a/modules/performance/pages/index_pushdowns.adoc b/modules/performance/pages/index_pushdowns.adoc index 389d1adcf..8b9bac822 100644 --- a/modules/performance/pages/index_pushdowns.adoc +++ b/modules/performance/pages/index_pushdowns.adoc @@ -61,7 +61,7 @@ LIMIT 1; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-simple.jsonc[tag=projection] +include::example$pushdown-simple.jsonc[tag=projection] ---- The query refers to fields `sourceairport` and `type`. @@ -95,7 +95,7 @@ The `span` and `range` from the EXPLAIN output of <>. .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-simple.jsonc[tag=predicate] +include::example$pushdown-simple.jsonc[tag=predicate] ---- * Each Span defines details about one index-key summarizing corresponding predicate conditions into a range-scan lookup for the index. @@ -174,7 +174,7 @@ WHERE distance < 2000 AND sourceairport = "LAX"; -- <1> .Results [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-comp-explain.jsonc[tag=excerpt] +include::example$pushdown-comp-explain.jsonc[tag=excerpt] ---- <.> The `spans` attribute of the EXPLAIN query plan output shows that the predicate is accurately represented and pushed-down to the indexer. @@ -187,7 +187,7 @@ For example, when you xref:n1ql:n1ql-manage/monitoring-n1ql-query.adoc[enable mo [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-comp-plan.jsonc[tags=index;ellipsis;final] +include::example$pushdown-comp-plan.jsonc[tags=index;ellipsis;final] ---- ==== @@ -217,7 +217,7 @@ There is no predicate on the 2nd index-key `sourceairport`. .Results [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-skip.jsonc[tag=excerpt] +include::example$pushdown-skip.jsonc[tag=excerpt] ---- <.> The EXPLAIN query plan output shows that the predicate is pushed-down to the indexer. @@ -253,7 +253,7 @@ This example uses the `def_inventory_landmark_city` index that comes pre-install .Index [source,sqlpp] ---- -include::example$services-and-indexes/indexes/pushdown-def-city.n1ql[] +include::example$pushdown-def-city.n1ql[] ---- .Query @@ -267,7 +267,7 @@ OFFSET 4000 LIMIT 10000; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-page-1.jsonc[tag=excerpt] +include::example$pushdown-page-1.jsonc[tag=excerpt] ---- <1> The `IndexScan3` operator handles `limit`. @@ -297,7 +297,7 @@ OFFSET 4000 LIMIT 10000; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-page-2.jsonc[tag=excerpt] +include::example$pushdown-page-2.jsonc[tag=excerpt] ---- <1> The `PrimaryScan3` operator handles `limit`. @@ -313,7 +313,7 @@ This example uses the `def_inventory_landmark_city` index that comes pre-install .Index [source,sqlpp] ---- -include::example$services-and-indexes/indexes/pushdown-def-city.n1ql[] +include::example$pushdown-def-city.n1ql[] ---- .Query [source,sqlpp] @@ -328,7 +328,7 @@ OFFSET 4000 LIMIT 10000; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-page-3.jsonc[tags=index;ellipsis;order] +include::example$pushdown-page-3.jsonc[tags=index;ellipsis;order] ---- <1> The `IndexScan3` operator does not handle `offset` or `limit`. @@ -351,7 +351,7 @@ This example uses the `def_inventory_landmark_city` index that comes pre-install .Index [source,sqlpp] ---- -include::example$services-and-indexes/indexes/pushdown-def-city.n1ql[] +include::example$pushdown-def-city.n1ql[] ---- .Query @@ -365,7 +365,7 @@ ORDER BY city; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-idx-1.jsonc[tags=index;ellipsis;query] +include::example$pushdown-idx-1.jsonc[tags=index;ellipsis;query] // ... ---- @@ -382,7 +382,7 @@ This example uses the `def_inventory_landmark_city` index that comes pre-install .Index [source,sqlpp] ---- -include::example$services-and-indexes/indexes/pushdown-def-city.n1ql[] +include::example$pushdown-def-city.n1ql[] ---- .Query @@ -396,7 +396,7 @@ ORDER BY meta().id; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-idx-2.jsonc[tags=index;ellipsis;query] +include::example$pushdown-idx-2.jsonc[tags=index;ellipsis;query] ---- <1> In this example, you can see an additional ORDER operator before the final projection, because the ORDER BY field `meta().id` is different from the index order key `city`. @@ -435,7 +435,7 @@ ORDER BY city DESC; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-idx-3.jsonc[tags=index;ellipsis;query] +include::example$pushdown-idx-3.jsonc[tags=index;ellipsis;query] ---- ==== @@ -459,7 +459,7 @@ This example uses the `def_inventory_landmark_city` index that comes pre-install .Index [source,sqlpp] ---- -include::example$services-and-indexes/indexes/pushdown-def-city.n1ql[] +include::example$pushdown-def-city.n1ql[] ---- .Query @@ -474,7 +474,7 @@ WHERE city IS NOT NULL; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-max.jsonc[tag=excerpt] +include::example$pushdown-max.jsonc[tag=excerpt] ---- ==== @@ -493,7 +493,7 @@ This example uses the `def_inventory_landmark_city` index that comes pre-install .Index [source,sqlpp] ---- -include::example$services-and-indexes/indexes/pushdown-def-city.n1ql[] +include::example$pushdown-def-city.n1ql[] ---- .Query @@ -508,7 +508,7 @@ WHERE city IS NOT NULL; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-min.jsonc[tag=excerpt] +include::example$pushdown-min.jsonc[tag=excerpt] ---- ==== @@ -525,7 +525,7 @@ This example uses the `def_inventory_landmark_city` index that comes pre-install .Index [source,sqlpp] ---- -include::example$services-and-indexes/indexes/pushdown-def-city.n1ql[] +include::example$pushdown-def-city.n1ql[] ---- .Query @@ -565,7 +565,7 @@ WHERE city IS NOT NULL; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-count.jsonc[tag=excerpt] +include::example$pushdown-count.jsonc[tag=excerpt] ---- <1> The index operator `IndexCountScan3` counts values so the Query Service does not need to do additional processing. @@ -584,7 +584,7 @@ This example uses the `def_inventory_landmark_city` index that comes pre-install .Index [source,sqlpp] ---- -include::example$services-and-indexes/indexes/pushdown-def-city.n1ql[] +include::example$pushdown-def-city.n1ql[] ---- .Query @@ -624,7 +624,7 @@ WHERE city IS NOT NULL; .Result [source,json] ---- -include::example$services-and-indexes/indexes/pushdown-distinct.jsonc[tag=excerpt] +include::example$pushdown-distinct.jsonc[tag=excerpt] ---- <1> The index operator `IndexCountScan3` counts distinct values so the Query Service does not need to do additional processing. diff --git a/modules/performance/pages/indexing-and-query-perf.adoc b/modules/performance/pages/indexing-and-query-perf.adoc index ae9c4b4ee..71d87e707 100644 --- a/modules/performance/pages/indexing-and-query-perf.adoc +++ b/modules/performance/pages/indexing-and-query-perf.adoc @@ -219,7 +219,7 @@ This is commonly used for performance optimization. ==== [source,sqlpp] ---- -include::example$services-and-indexes/indexes/create-idx-composite.n1ql[] +include::example$create-idx-composite.n1ql[] ---- ==== @@ -239,7 +239,7 @@ For example: ==== [source,sqlpp] ---- -include::example$services-and-indexes/indexes/create-idx-expr.n1ql[] +include::example$create-idx-expr.n1ql[] ---- ==== @@ -371,7 +371,7 @@ With a rich structure as seen in the array schedule, here's how you index a part ==== [source,sqlpp] ---- -include::example$services-and-indexes/indexes/create-idx-array.n1ql[] +include::example$create-idx-array.n1ql[] ---- ==== @@ -528,7 +528,7 @@ When you want to create an index of restaurants, you can simply add the distingu ==== [source,sqlpp] ---- -include::example$services-and-indexes/indexes/create-idx-partial.n1ql[] +include::example$create-idx-partial.n1ql[] ---- ==== From 79e23d4a9d4dee5273bab4b5c1a65f3bc888023d Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 16:56:34 +0100 Subject: [PATCH 13/23] Update GSI image coordinates --- modules/indexes/pages/index-lifecycle.adoc | 10 +++++----- modules/performance/pages/index_pushdowns.adoc | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/indexes/pages/index-lifecycle.adoc b/modules/indexes/pages/index-lifecycle.adoc index 764ed4502..a5f97c5f8 100644 --- a/modules/indexes/pages/index-lifecycle.adoc +++ b/modules/indexes/pages/index-lifecycle.adoc @@ -1,7 +1,7 @@ = Index Lifecycle :page-topic-type: concept :page-aliases: learn:services-and-indexes/indexes/index-lifecycle -:imagesdir: ../../../assets/images +:imagesdir: ../images :description: An overview of the lifecycle of a Global Secondary Index, from creation and building to updates and scans. [abstract] @@ -21,7 +21,7 @@ The build phase cannot start until the creation phase is complete. During the build phase, the Index Service reads the documents from the Data Service and builds the index. -image::services-and-indexes/indexes/index-lifecycle-build.png[align=center] +image::index-lifecycle-build.png[align=center] . The projector requests a DCP stream on the specified collection. . DCP streams only the documents in the collection. @@ -38,9 +38,9 @@ For more information and examples, refer to xref:n1ql:n1ql-language-reference/cr When a Global Secondary Index has been created on a collection, the index is updated when documents within the collection are updated. -image::services-and-indexes/indexes/index-lifecycle-update-1.png[align=center] +image::index-lifecycle-update-1.png[align=center] -image::services-and-indexes/indexes/index-lifecycle-update-2.png[align=center] +image::index-lifecycle-update-2.png[align=center] . The projector keeps a _bucket-level_ DCP stream open for updates -- this limits the number of DCP connections. . When a document within the collection is updated, the projector utilizes the collection ID available with each mutation, and only evaluates the indexes defined for that collection. @@ -54,7 +54,7 @@ Refer to xref:learn:clusters-and-availability/intra-cluster-replication.adoc#dat When a query needs to make use of a Global Secondary Index, the index is scanned. -image::services-and-indexes/indexes/index-lifecycle-scan.png[align=center] +image::index-lifecycle-scan.png[align=center] * If the index consistency is `not_bounded`, the scan proceeds without waiting for the index to be updated. * If the scan consistency is `at_plus` or `request_plus`, the scan coordinator waits for the index to be updated for that collection only, and then performs the scan. diff --git a/modules/performance/pages/index_pushdowns.adoc b/modules/performance/pages/index_pushdowns.adoc index 8b9bac822..7a4b8595f 100644 --- a/modules/performance/pages/index_pushdowns.adoc +++ b/modules/performance/pages/index_pushdowns.adoc @@ -1,6 +1,6 @@ = Index Pushdowns :description: Index Pushdowns are performance optimizations where the Query engine pushes more of the work down to the Indexer. -:imagesdir: ../../../assets/images +:imagesdir: ../images :page-topic-type: concept :page-aliases: learn:services-and-indexes/indexes/index_pushdowns @@ -121,7 +121,7 @@ For example, consider the following hypothetical index: CREATE INDEX `idx_age_name` ON users(age, name); ---- -image::services-and-indexes/indexes/IndexKeyOrder.png[,570] +image::IndexKeyOrder.png[,570] Various age and name values are stored in the index in a tree-like structure, represented in simplified form in the diagram above, with all the index key values linearly sorted as ordered pairs. For instance, From c17a86c9b1b817199686427884cafa9d4c071bac Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 17:01:45 +0100 Subject: [PATCH 14/23] Update GSI diagram coordinates --- .../n1ql/pages/n1ql-language-reference/covering-indexes.adoc | 4 ++-- modules/n1ql/pages/n1ql-language-reference/selectintro.adoc | 4 ++-- modules/performance/pages/index-scans.adoc | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc b/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc index c1dd811e3..10f49096d 100644 --- a/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc @@ -24,7 +24,7 @@ The following diagram illustrates the query execution work flow without covering .Query execution workflow including fetch request from Data service [plantuml,n1ql-query-workflow,svg] .... -include::learn:partial$diagrams/query-execution.puml[tags=!example] +include::performance:partial$diagrams/query-execution.puml[tags=!example] .... The following diagram illustrates the query execution work flow with covering indexes: @@ -32,7 +32,7 @@ The following diagram illustrates the query execution work flow with covering in .Query execution workflow with no fetch request from Data service [plantuml,n1ql-query-workflow-cover-idx,svg] .... -include::learn:partial$diagrams/query-execution.puml[tags=!example;!fetch] +include::performance:partial$diagrams/query-execution.puml[tags=!example;!fetch] .... As you can see in the second diagram, a well designed query that uses a covering index avoids the additional steps to fetch the data from the data service. diff --git a/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc b/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc index afa96f22e..2417769c9 100644 --- a/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc @@ -157,7 +157,7 @@ The following diagram shows the query execution workflow at a high level and ill .Query Execution Workflow [plantuml,query-execution,svg] .... -include::learn:partial$diagrams/query-execution.puml[] +include::performance:partial$diagrams/query-execution.puml[] .... The SELECT statement is executed as a sequence of steps. @@ -170,7 +170,7 @@ The following diagram shows the possible elements and operations during query ex .Query Execution Phases [plantuml,query-service,svg] .... -include::learn:partial$diagrams/query-service.puml[] +include::performance:partial$diagrams/query-service.puml[] .... Some phases are done serially while others are done in parallel, as specified by their parent operator. diff --git a/modules/performance/pages/index-scans.adoc b/modules/performance/pages/index-scans.adoc index 07053be45..bb19cc46e 100644 --- a/modules/performance/pages/index-scans.adoc +++ b/modules/performance/pages/index-scans.adoc @@ -2,7 +2,7 @@ :description: This section discusses how index spans are generated from query predicates and provides a number of examples. :page-topic-type: concept :page-aliases: learn:services-and-indexes/indexes/index-scans -:imagesdir: ../../../assets/images +:imagesdir: ../images [abstract] During query execution, when the index path is chosen, the query engine requests the scan by providing a range of values to return. From 28ac5c26aab0c2b810d7c98499259d5689dea6d7 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Thu, 15 Aug 2024 17:06:31 +0100 Subject: [PATCH 15/23] Driveby fix unsupported icons --- .../performance/pages/early-filters-and-pagination.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/performance/pages/early-filters-and-pagination.adoc b/modules/performance/pages/early-filters-and-pagination.adoc index ba2aeb096..0ba54efcc 100644 --- a/modules/performance/pages/early-filters-and-pagination.adoc +++ b/modules/performance/pages/early-filters-and-pagination.adoc @@ -461,10 +461,10 @@ The following table summarizes the different methods of performing filtering, or ^<>^ | Fetch required? -| icon:times-circle[red] No -| icon:check-circle[green] Yes -| icon:check-circle[green] Yes -| icon:check-circle[green] Yes +| icon:times[fw] No +| icon:check[fw] Yes +| icon:check[fw] Yes +| icon:check[fw] Yes | Filters, order, and pagination + performed: From 131b53b5993e2f80fc855aa527352285c476469e Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Fri, 16 Aug 2024 16:07:19 +0100 Subject: [PATCH 16/23] Minor changes to indexing overview and content order --- modules/indexes/pages/indexing-overview.adoc | 4 ++-- modules/n1ql/partials/nav.adoc | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/indexes/pages/indexing-overview.adoc b/modules/indexes/pages/indexing-overview.adoc index 09fde3a18..f315d6d72 100644 --- a/modules/indexes/pages/indexing-overview.adoc +++ b/modules/indexes/pages/indexing-overview.adoc @@ -20,10 +20,9 @@ endif::[] [abstract] {description} -== Tuning and Query Performance +== Indexing and Query Performance * xref:performance:query-without-index.adoc[] -* xref:indexes:index-lifecycle.adoc[] * xref:performance:indexing-and-query-perf.adoc[] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[] * xref:performance:index-scans.adoc[] @@ -43,6 +42,7 @@ endif::[] == Storage and Availability +* xref:indexes:index-lifecycle.adoc[] * xref:indexes:index-replication.adoc[] * xref:indexes:storage-modes.adoc[] diff --git a/modules/n1ql/partials/nav.adoc b/modules/n1ql/partials/nav.adoc index 44be9171f..269386853 100644 --- a/modules/n1ql/partials/nav.adoc +++ b/modules/n1ql/partials/nav.adoc @@ -151,13 +151,13 @@ *** xref:n1ql:n1ql-language-reference/n1ql-error-codes.adoc[] ** xref:indexes:indexing-overview.adoc[] *** xref:performance:query-without-index.adoc[] - *** xref:indexes:index-lifecycle.adoc[] *** xref:performance:indexing-and-query-perf.adoc[] *** xref:n1ql:n1ql-language-reference/covering-indexes.adoc[] *** xref:performance:index-scans.adoc[] *** xref:performance:index_pushdowns.adoc[] *** xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[] *** xref:performance:early-filters-and-pagination.adoc[] + *** xref:indexes:index-lifecycle.adoc[] *** xref:indexes:index-replication.adoc[] *** xref:indexes:storage-modes.adoc[] ** xref:javascript-udfs:javascript-functions-with-couchbase.adoc[] From dcecd7f2543077d8f5924643af2e324e99d83747 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Fri, 16 Aug 2024 17:29:16 +0100 Subject: [PATCH 17/23] Combine Performance and Indexes modules --- .../examples/create-idx-array.n1ql | 0 .../examples/create-idx-composite.n1ql | 0 .../examples/create-idx-expr.n1ql | 0 .../examples/create-idx-partial.n1ql | 0 .../examples/early-filter-1.jsonc | 0 .../examples/early-filter-1.n1ql | 0 .../examples/early-filter-2.jsonc | 0 .../examples/early-filter-2.n1ql | 0 .../examples/early-filter-3.jsonc | 0 .../examples/early-filter-3.n1ql | 0 .../examples/early-filter-4.jsonc | 0 .../examples/early-filter-4.n1ql | 0 .../examples/early-filter-idx.n1ql | 0 .../examples/early-paginate-1.jsonc | 0 .../examples/early-paginate-1.n1ql | 0 .../examples/early-paginate-2.jsonc | 0 .../examples/early-paginate-2.n1ql | 0 .../examples/early-paginate-3.jsonc | 0 .../examples/early-paginate-3.n1ql | 0 .../examples/early-paginate-4.jsonc | 0 .../examples/early-paginate-4.n1ql | 0 .../examples/early-paginate-idx.n1ql | 0 .../examples/pushdown-comp-explain.jsonc | 0 .../examples/pushdown-comp-plan.jsonc | 0 .../examples/pushdown-count.jsonc | 0 .../examples/pushdown-def-city.n1ql | 0 .../examples/pushdown-distinct.jsonc | 0 .../examples/pushdown-idx-1.jsonc | 0 .../examples/pushdown-idx-2.jsonc | 0 .../examples/pushdown-idx-3.jsonc | 0 .../examples/pushdown-max.jsonc | 0 .../examples/pushdown-min.jsonc | 0 .../examples/pushdown-page-1.jsonc | 0 .../examples/pushdown-page-2.jsonc | 0 .../examples/pushdown-page-3.jsonc | 0 .../examples/pushdown-simple.jsonc | 0 .../examples/pushdown-skip.jsonc | 0 .../images/IndexKeyOrder.png | Bin .../pages/early-filters-and-pagination.adoc | 0 .../{performance => indexes}/pages/index-scans.adoc | 0 .../pages/index_pushdowns.adoc | 0 .../pages/indexing-and-query-perf.adoc | 0 .../pages/query-without-index.adoc | 0 .../partials/diagrams/query-execution.puml | 0 .../partials/diagrams/query-service.puml | 0 45 files changed, 0 insertions(+), 0 deletions(-) rename modules/{performance => indexes}/examples/create-idx-array.n1ql (100%) rename modules/{performance => indexes}/examples/create-idx-composite.n1ql (100%) rename modules/{performance => indexes}/examples/create-idx-expr.n1ql (100%) rename modules/{performance => indexes}/examples/create-idx-partial.n1ql (100%) rename modules/{performance => indexes}/examples/early-filter-1.jsonc (100%) rename modules/{performance => indexes}/examples/early-filter-1.n1ql (100%) rename modules/{performance => indexes}/examples/early-filter-2.jsonc (100%) rename modules/{performance => indexes}/examples/early-filter-2.n1ql (100%) rename modules/{performance => indexes}/examples/early-filter-3.jsonc (100%) rename modules/{performance => indexes}/examples/early-filter-3.n1ql (100%) rename modules/{performance => indexes}/examples/early-filter-4.jsonc (100%) rename modules/{performance => indexes}/examples/early-filter-4.n1ql (100%) rename modules/{performance => indexes}/examples/early-filter-idx.n1ql (100%) rename modules/{performance => indexes}/examples/early-paginate-1.jsonc (100%) rename modules/{performance => indexes}/examples/early-paginate-1.n1ql (100%) rename modules/{performance => indexes}/examples/early-paginate-2.jsonc (100%) rename modules/{performance => indexes}/examples/early-paginate-2.n1ql (100%) rename modules/{performance => indexes}/examples/early-paginate-3.jsonc (100%) rename modules/{performance => indexes}/examples/early-paginate-3.n1ql (100%) rename modules/{performance => indexes}/examples/early-paginate-4.jsonc (100%) rename modules/{performance => indexes}/examples/early-paginate-4.n1ql (100%) rename modules/{performance => indexes}/examples/early-paginate-idx.n1ql (100%) rename modules/{performance => indexes}/examples/pushdown-comp-explain.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-comp-plan.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-count.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-def-city.n1ql (100%) rename modules/{performance => indexes}/examples/pushdown-distinct.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-idx-1.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-idx-2.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-idx-3.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-max.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-min.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-page-1.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-page-2.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-page-3.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-simple.jsonc (100%) rename modules/{performance => indexes}/examples/pushdown-skip.jsonc (100%) rename modules/{performance => indexes}/images/IndexKeyOrder.png (100%) rename modules/{performance => indexes}/pages/early-filters-and-pagination.adoc (100%) rename modules/{performance => indexes}/pages/index-scans.adoc (100%) rename modules/{performance => indexes}/pages/index_pushdowns.adoc (100%) rename modules/{performance => indexes}/pages/indexing-and-query-perf.adoc (100%) rename modules/{performance => indexes}/pages/query-without-index.adoc (100%) rename modules/{performance => indexes}/partials/diagrams/query-execution.puml (100%) rename modules/{performance => indexes}/partials/diagrams/query-service.puml (100%) diff --git a/modules/performance/examples/create-idx-array.n1ql b/modules/indexes/examples/create-idx-array.n1ql similarity index 100% rename from modules/performance/examples/create-idx-array.n1ql rename to modules/indexes/examples/create-idx-array.n1ql diff --git a/modules/performance/examples/create-idx-composite.n1ql b/modules/indexes/examples/create-idx-composite.n1ql similarity index 100% rename from modules/performance/examples/create-idx-composite.n1ql rename to modules/indexes/examples/create-idx-composite.n1ql diff --git a/modules/performance/examples/create-idx-expr.n1ql b/modules/indexes/examples/create-idx-expr.n1ql similarity index 100% rename from modules/performance/examples/create-idx-expr.n1ql rename to modules/indexes/examples/create-idx-expr.n1ql diff --git a/modules/performance/examples/create-idx-partial.n1ql b/modules/indexes/examples/create-idx-partial.n1ql similarity index 100% rename from modules/performance/examples/create-idx-partial.n1ql rename to modules/indexes/examples/create-idx-partial.n1ql diff --git a/modules/performance/examples/early-filter-1.jsonc b/modules/indexes/examples/early-filter-1.jsonc similarity index 100% rename from modules/performance/examples/early-filter-1.jsonc rename to modules/indexes/examples/early-filter-1.jsonc diff --git a/modules/performance/examples/early-filter-1.n1ql b/modules/indexes/examples/early-filter-1.n1ql similarity index 100% rename from modules/performance/examples/early-filter-1.n1ql rename to modules/indexes/examples/early-filter-1.n1ql diff --git a/modules/performance/examples/early-filter-2.jsonc b/modules/indexes/examples/early-filter-2.jsonc similarity index 100% rename from modules/performance/examples/early-filter-2.jsonc rename to modules/indexes/examples/early-filter-2.jsonc diff --git a/modules/performance/examples/early-filter-2.n1ql b/modules/indexes/examples/early-filter-2.n1ql similarity index 100% rename from modules/performance/examples/early-filter-2.n1ql rename to modules/indexes/examples/early-filter-2.n1ql diff --git a/modules/performance/examples/early-filter-3.jsonc b/modules/indexes/examples/early-filter-3.jsonc similarity index 100% rename from modules/performance/examples/early-filter-3.jsonc rename to modules/indexes/examples/early-filter-3.jsonc diff --git a/modules/performance/examples/early-filter-3.n1ql b/modules/indexes/examples/early-filter-3.n1ql similarity index 100% rename from modules/performance/examples/early-filter-3.n1ql rename to modules/indexes/examples/early-filter-3.n1ql diff --git a/modules/performance/examples/early-filter-4.jsonc b/modules/indexes/examples/early-filter-4.jsonc similarity index 100% rename from modules/performance/examples/early-filter-4.jsonc rename to modules/indexes/examples/early-filter-4.jsonc diff --git a/modules/performance/examples/early-filter-4.n1ql b/modules/indexes/examples/early-filter-4.n1ql similarity index 100% rename from modules/performance/examples/early-filter-4.n1ql rename to modules/indexes/examples/early-filter-4.n1ql diff --git a/modules/performance/examples/early-filter-idx.n1ql b/modules/indexes/examples/early-filter-idx.n1ql similarity index 100% rename from modules/performance/examples/early-filter-idx.n1ql rename to modules/indexes/examples/early-filter-idx.n1ql diff --git a/modules/performance/examples/early-paginate-1.jsonc b/modules/indexes/examples/early-paginate-1.jsonc similarity index 100% rename from modules/performance/examples/early-paginate-1.jsonc rename to modules/indexes/examples/early-paginate-1.jsonc diff --git a/modules/performance/examples/early-paginate-1.n1ql b/modules/indexes/examples/early-paginate-1.n1ql similarity index 100% rename from modules/performance/examples/early-paginate-1.n1ql rename to modules/indexes/examples/early-paginate-1.n1ql diff --git a/modules/performance/examples/early-paginate-2.jsonc b/modules/indexes/examples/early-paginate-2.jsonc similarity index 100% rename from modules/performance/examples/early-paginate-2.jsonc rename to modules/indexes/examples/early-paginate-2.jsonc diff --git a/modules/performance/examples/early-paginate-2.n1ql b/modules/indexes/examples/early-paginate-2.n1ql similarity index 100% rename from modules/performance/examples/early-paginate-2.n1ql rename to modules/indexes/examples/early-paginate-2.n1ql diff --git a/modules/performance/examples/early-paginate-3.jsonc b/modules/indexes/examples/early-paginate-3.jsonc similarity index 100% rename from modules/performance/examples/early-paginate-3.jsonc rename to modules/indexes/examples/early-paginate-3.jsonc diff --git a/modules/performance/examples/early-paginate-3.n1ql b/modules/indexes/examples/early-paginate-3.n1ql similarity index 100% rename from modules/performance/examples/early-paginate-3.n1ql rename to modules/indexes/examples/early-paginate-3.n1ql diff --git a/modules/performance/examples/early-paginate-4.jsonc b/modules/indexes/examples/early-paginate-4.jsonc similarity index 100% rename from modules/performance/examples/early-paginate-4.jsonc rename to modules/indexes/examples/early-paginate-4.jsonc diff --git a/modules/performance/examples/early-paginate-4.n1ql b/modules/indexes/examples/early-paginate-4.n1ql similarity index 100% rename from modules/performance/examples/early-paginate-4.n1ql rename to modules/indexes/examples/early-paginate-4.n1ql diff --git a/modules/performance/examples/early-paginate-idx.n1ql b/modules/indexes/examples/early-paginate-idx.n1ql similarity index 100% rename from modules/performance/examples/early-paginate-idx.n1ql rename to modules/indexes/examples/early-paginate-idx.n1ql diff --git a/modules/performance/examples/pushdown-comp-explain.jsonc b/modules/indexes/examples/pushdown-comp-explain.jsonc similarity index 100% rename from modules/performance/examples/pushdown-comp-explain.jsonc rename to modules/indexes/examples/pushdown-comp-explain.jsonc diff --git a/modules/performance/examples/pushdown-comp-plan.jsonc b/modules/indexes/examples/pushdown-comp-plan.jsonc similarity index 100% rename from modules/performance/examples/pushdown-comp-plan.jsonc rename to modules/indexes/examples/pushdown-comp-plan.jsonc diff --git a/modules/performance/examples/pushdown-count.jsonc b/modules/indexes/examples/pushdown-count.jsonc similarity index 100% rename from modules/performance/examples/pushdown-count.jsonc rename to modules/indexes/examples/pushdown-count.jsonc diff --git a/modules/performance/examples/pushdown-def-city.n1ql b/modules/indexes/examples/pushdown-def-city.n1ql similarity index 100% rename from modules/performance/examples/pushdown-def-city.n1ql rename to modules/indexes/examples/pushdown-def-city.n1ql diff --git a/modules/performance/examples/pushdown-distinct.jsonc b/modules/indexes/examples/pushdown-distinct.jsonc similarity index 100% rename from modules/performance/examples/pushdown-distinct.jsonc rename to modules/indexes/examples/pushdown-distinct.jsonc diff --git a/modules/performance/examples/pushdown-idx-1.jsonc b/modules/indexes/examples/pushdown-idx-1.jsonc similarity index 100% rename from modules/performance/examples/pushdown-idx-1.jsonc rename to modules/indexes/examples/pushdown-idx-1.jsonc diff --git a/modules/performance/examples/pushdown-idx-2.jsonc b/modules/indexes/examples/pushdown-idx-2.jsonc similarity index 100% rename from modules/performance/examples/pushdown-idx-2.jsonc rename to modules/indexes/examples/pushdown-idx-2.jsonc diff --git a/modules/performance/examples/pushdown-idx-3.jsonc b/modules/indexes/examples/pushdown-idx-3.jsonc similarity index 100% rename from modules/performance/examples/pushdown-idx-3.jsonc rename to modules/indexes/examples/pushdown-idx-3.jsonc diff --git a/modules/performance/examples/pushdown-max.jsonc b/modules/indexes/examples/pushdown-max.jsonc similarity index 100% rename from modules/performance/examples/pushdown-max.jsonc rename to modules/indexes/examples/pushdown-max.jsonc diff --git a/modules/performance/examples/pushdown-min.jsonc b/modules/indexes/examples/pushdown-min.jsonc similarity index 100% rename from modules/performance/examples/pushdown-min.jsonc rename to modules/indexes/examples/pushdown-min.jsonc diff --git a/modules/performance/examples/pushdown-page-1.jsonc b/modules/indexes/examples/pushdown-page-1.jsonc similarity index 100% rename from modules/performance/examples/pushdown-page-1.jsonc rename to modules/indexes/examples/pushdown-page-1.jsonc diff --git a/modules/performance/examples/pushdown-page-2.jsonc b/modules/indexes/examples/pushdown-page-2.jsonc similarity index 100% rename from modules/performance/examples/pushdown-page-2.jsonc rename to modules/indexes/examples/pushdown-page-2.jsonc diff --git a/modules/performance/examples/pushdown-page-3.jsonc b/modules/indexes/examples/pushdown-page-3.jsonc similarity index 100% rename from modules/performance/examples/pushdown-page-3.jsonc rename to modules/indexes/examples/pushdown-page-3.jsonc diff --git a/modules/performance/examples/pushdown-simple.jsonc b/modules/indexes/examples/pushdown-simple.jsonc similarity index 100% rename from modules/performance/examples/pushdown-simple.jsonc rename to modules/indexes/examples/pushdown-simple.jsonc diff --git a/modules/performance/examples/pushdown-skip.jsonc b/modules/indexes/examples/pushdown-skip.jsonc similarity index 100% rename from modules/performance/examples/pushdown-skip.jsonc rename to modules/indexes/examples/pushdown-skip.jsonc diff --git a/modules/performance/images/IndexKeyOrder.png b/modules/indexes/images/IndexKeyOrder.png similarity index 100% rename from modules/performance/images/IndexKeyOrder.png rename to modules/indexes/images/IndexKeyOrder.png diff --git a/modules/performance/pages/early-filters-and-pagination.adoc b/modules/indexes/pages/early-filters-and-pagination.adoc similarity index 100% rename from modules/performance/pages/early-filters-and-pagination.adoc rename to modules/indexes/pages/early-filters-and-pagination.adoc diff --git a/modules/performance/pages/index-scans.adoc b/modules/indexes/pages/index-scans.adoc similarity index 100% rename from modules/performance/pages/index-scans.adoc rename to modules/indexes/pages/index-scans.adoc diff --git a/modules/performance/pages/index_pushdowns.adoc b/modules/indexes/pages/index_pushdowns.adoc similarity index 100% rename from modules/performance/pages/index_pushdowns.adoc rename to modules/indexes/pages/index_pushdowns.adoc diff --git a/modules/performance/pages/indexing-and-query-perf.adoc b/modules/indexes/pages/indexing-and-query-perf.adoc similarity index 100% rename from modules/performance/pages/indexing-and-query-perf.adoc rename to modules/indexes/pages/indexing-and-query-perf.adoc diff --git a/modules/performance/pages/query-without-index.adoc b/modules/indexes/pages/query-without-index.adoc similarity index 100% rename from modules/performance/pages/query-without-index.adoc rename to modules/indexes/pages/query-without-index.adoc diff --git a/modules/performance/partials/diagrams/query-execution.puml b/modules/indexes/partials/diagrams/query-execution.puml similarity index 100% rename from modules/performance/partials/diagrams/query-execution.puml rename to modules/indexes/partials/diagrams/query-execution.puml diff --git a/modules/performance/partials/diagrams/query-service.puml b/modules/indexes/partials/diagrams/query-service.puml similarity index 100% rename from modules/performance/partials/diagrams/query-service.puml rename to modules/indexes/partials/diagrams/query-service.puml From 8c76d65d44dd8c875d8df01a00fc661c5d1062cf Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Fri, 16 Aug 2024 21:32:26 +0100 Subject: [PATCH 18/23] Update coordinates after consolidation --- modules/guides/pages/create-index.adoc | 8 ++++---- .../pages/early-filters-and-pagination.adoc | 6 +++--- modules/indexes/pages/index-lifecycle.adoc | 2 +- modules/indexes/pages/index_pushdowns.adoc | 8 ++++---- modules/indexes/pages/indexing-overview.adoc | 16 ++++++++-------- .../adaptive-indexing.adoc | 2 +- .../pages/n1ql-language-reference/advise.adoc | 2 +- .../covering-indexes.adoc | 10 +++++----- .../n1ql-language-reference/createindex.adoc | 2 +- .../n1ql-language-reference/flex-indexes.adoc | 2 +- .../groupby-aggregate-performance.adoc | 6 +++--- .../n1ql-language-reference/selectintro.adoc | 4 ++-- modules/n1ql/partials/nav.adoc | 10 +++++----- 13 files changed, 39 insertions(+), 39 deletions(-) diff --git a/modules/guides/pages/create-index.adoc b/modules/guides/pages/create-index.adoc index ea07e5bc6..4fa256c94 100644 --- a/modules/guides/pages/create-index.adoc +++ b/modules/guides/pages/create-index.adoc @@ -254,7 +254,7 @@ The following query creates a secondary index on an expression using the `name` [source,sqlpp] ---- -include::performance:example$create-idx-expr.n1ql[] +include::indexes:example$create-idx-expr.n1ql[] ---- For further details and examples, refer to xref:n1ql:n1ql-language-reference/createindex.adoc[CREATE INDEX]. @@ -384,7 +384,7 @@ include::partial$query-context.adoc[tag=step] .Query [source,sqlpp] ---- -include::performance:example$create-idx-composite.n1ql[] +include::indexes:example$create-idx-composite.n1ql[] ---- For further details and examples, refer to xref:n1ql:n1ql-language-reference/createindex.adoc[CREATE INDEX]. @@ -507,7 +507,7 @@ include::partial$query-context.adoc[tag=step] .Query [source,sqlpp] ---- -include::performance:example$create-idx-array.n1ql[] +include::indexes:example$create-idx-array.n1ql[] ---- ==== @@ -528,7 +528,7 @@ include::partial$query-context.adoc[tag=step] .Query [source,sqlpp] ---- -include::performance:example$create-idx-partial.n1ql[] +include::indexes:example$create-idx-partial.n1ql[] ---- ==== diff --git a/modules/indexes/pages/early-filters-and-pagination.adoc b/modules/indexes/pages/early-filters-and-pagination.adoc index 0ba54efcc..eb8b7ef33 100644 --- a/modules/indexes/pages/early-filters-and-pagination.adoc +++ b/modules/indexes/pages/early-filters-and-pagination.adoc @@ -104,7 +104,7 @@ Any feature that can reduce the amount of data to be fetched will improve the qu It would obviously be inefficient to fetch an entire dataset, and then discard a large portion of it by applying filters and pagination. Couchbase Server therefore attempts to apply filters, order, and pagination _before_ fetching data, wherever possible. -Index xref:performance:index_pushdowns.adoc[pushdowns] provide one way to reduce the amount of data to be fetched. +Index xref:index_pushdowns.adoc[pushdowns] provide one way to reduce the amount of data to be fetched. Some filters, ordering, and pagination may be pushed down to the Index service, along with grouping and aggregates. The Index service applies these operations to the result of the index scan. The Query service then only needs to fetch the remaining data. @@ -487,9 +487,9 @@ NOTE: An uncovered query may use a mixture of these methods. == Related Links -* xref:performance:index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:index-scans.adoc#query-execution-details[Query Execution: Details] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] -* xref:performance:index_pushdowns.adoc[Index Pushdown Optimizations] +* xref:index_pushdowns.adoc[Index Pushdown Optimizations] * xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] * xref:n1ql:n1ql-language-reference/where.adoc[WHERE Clause] -- to apply a filter * xref:n1ql:n1ql-language-reference/orderby.adoc[ORDER BY Clause] -- to apply a sort diff --git a/modules/indexes/pages/index-lifecycle.adoc b/modules/indexes/pages/index-lifecycle.adoc index a5f97c5f8..21e7f1bc8 100644 --- a/modules/indexes/pages/index-lifecycle.adoc +++ b/modules/indexes/pages/index-lifecycle.adoc @@ -61,4 +61,4 @@ image::index-lifecycle-scan.png[align=center] The scan coordinator does not need to wait for indexes on other collections to be updated, even if documents in other collections are being mutated. -Refer to xref:performance:index-scans.adoc[Index Scans] and xref:indexes:index-replication.adoc#index-consistency[Index Consistency] for further details. \ No newline at end of file +Refer to xref:index-scans.adoc[Index Scans] and xref:index-replication.adoc#index-consistency[Index Consistency] for further details. \ No newline at end of file diff --git a/modules/indexes/pages/index_pushdowns.adoc b/modules/indexes/pages/index_pushdowns.adoc index 7a4b8595f..8a65e890d 100644 --- a/modules/indexes/pages/index_pushdowns.adoc +++ b/modules/indexes/pages/index_pushdowns.adoc @@ -100,7 +100,7 @@ include::example$pushdown-simple.jsonc[tag=predicate] * Each Span defines details about one index-key summarizing corresponding predicate conditions into a range-scan lookup for the index. In this example, the predicate condition (`sourceairport = "SFO"`) translates to one span with one range that specifies both `low` and `high` values of "SFO" (to imply equals condition). -* Refer to section xref:performance:index-scans.adoc[Scans] for more information. +* Refer to section xref:index-scans.adoc[Scans] for more information. ==== == Composite Predicate Pushdown @@ -108,7 +108,7 @@ In this example, the predicate condition (`sourceairport = "SFO"`) translates to Compound or composite predicates are those with multiple conditions on different fields of the document. When the predicate is conjunctive with multiple AND conditions, then a single `span` with multiple `ranges` are specified in the index-scan request. When the predicate is disjunctive, then multiple `spans` are specified. -See xref:performance:index-scans.adoc[Scans] +See xref:index-scans.adoc[Scans] for more details and examples on how predicate pushdown works for various types of index-scans as well as the conjunctive predicate AND and the disjunctive predicate OR. === Index Key Order and Structure @@ -632,7 +632,7 @@ include::example$pushdown-distinct.jsonc[tag=excerpt] == Related Links -* xref:performance:index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:index-scans.adoc#query-execution-details[Query Execution: Details] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] * xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] -* xref:performance:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] diff --git a/modules/indexes/pages/indexing-overview.adoc b/modules/indexes/pages/indexing-overview.adoc index f315d6d72..43ccabb49 100644 --- a/modules/indexes/pages/indexing-overview.adoc +++ b/modules/indexes/pages/indexing-overview.adoc @@ -22,13 +22,13 @@ endif::[] == Indexing and Query Performance -* xref:performance:query-without-index.adoc[] -* xref:performance:indexing-and-query-perf.adoc[] +* xref:query-without-index.adoc[] +* xref:indexing-and-query-perf.adoc[] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[] -* xref:performance:index-scans.adoc[] -* xref:performance:index_pushdowns.adoc[] +* xref:index-scans.adoc[] +* xref:index_pushdowns.adoc[] * xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[] -* xref:performance:early-filters-and-pagination.adoc[] +* xref:early-filters-and-pagination.adoc[] == Index Commands @@ -42,9 +42,9 @@ endif::[] == Storage and Availability -* xref:indexes:index-lifecycle.adoc[] -* xref:indexes:index-replication.adoc[] -* xref:indexes:storage-modes.adoc[] +* xref:index-lifecycle.adoc[] +* xref:index-replication.adoc[] +* xref:storage-modes.adoc[] == Related Links diff --git a/modules/n1ql/pages/n1ql-language-reference/adaptive-indexing.adoc b/modules/n1ql/pages/n1ql-language-reference/adaptive-indexing.adoc index 21ae721df..6ae697a33 100644 --- a/modules/n1ql/pages/n1ql-language-reference/adaptive-indexing.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/adaptive-indexing.adoc @@ -6,7 +6,7 @@ :createindex: xref:n1ql-language-reference/createindex.adoc :install-sample-buckets: xref:manage:manage-settings/install-sample-buckets.adoc :indexing-arrays: xref:n1ql-language-reference/indexing-arrays.adoc -:partial-index: xref:performance:indexing-and-query-perf.adoc#partial-index +:partial-index: xref:indexes:indexing-and-query-perf.adoc#partial-index {description} Such an index is generic in nature, and it can efficiently index and lookup any of the index-key values. diff --git a/modules/n1ql/pages/n1ql-language-reference/advise.adoc b/modules/n1ql/pages/n1ql-language-reference/advise.adoc index be271dbb0..25040ab05 100644 --- a/modules/n1ql/pages/n1ql-language-reference/advise.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/advise.adoc @@ -27,7 +27,7 @@ :aggregate-quantifier: {n1ql}/aggregatefun.adoc#aggregate-quantifier // Indexing and Query Performance cross-references -:indexing-and-query-perf: xref:performance:indexing-and-query-perf.adoc +:indexing-and-query-perf: xref:indexes:indexing-and-query-perf.adoc :secondary-index: {indexing-and-query-perf}#secondary-index :partial-index: {indexing-and-query-perf}#partial-index :array-index: {indexing-and-query-perf}#array-index diff --git a/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc b/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc index 10f49096d..46df8bdb5 100644 --- a/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc @@ -24,7 +24,7 @@ The following diagram illustrates the query execution work flow without covering .Query execution workflow including fetch request from Data service [plantuml,n1ql-query-workflow,svg] .... -include::performance:partial$diagrams/query-execution.puml[tags=!example] +include::indexes:partial$diagrams/query-execution.puml[tags=!example] .... The following diagram illustrates the query execution work flow with covering indexes: @@ -32,7 +32,7 @@ The following diagram illustrates the query execution work flow with covering in .Query execution workflow with no fetch request from Data service [plantuml,n1ql-query-workflow-cover-idx,svg] .... -include::performance:partial$diagrams/query-execution.puml[tags=!example;!fetch] +include::indexes:partial$diagrams/query-execution.puml[tags=!example;!fetch] .... As you can see in the second diagram, a well designed query that uses a covering index avoids the additional steps to fetch the data from the data service. @@ -467,7 +467,7 @@ The query plan for the above query shows that the index covers the query. == Related Links -* xref:performance:index-scans.adoc#query-execution-details[Query Execution: Details] -* xref:performance:index_pushdowns.adoc[Index Pushdown Optimizations] +* xref:indexes:index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:indexes:index_pushdowns.adoc[Index Pushdown Optimizations] * xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] -* xref:performance:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:indexes:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] diff --git a/modules/n1ql/pages/n1ql-language-reference/createindex.adoc b/modules/n1ql/pages/n1ql-language-reference/createindex.adoc index a859ad2e7..5ed547d87 100644 --- a/modules/n1ql/pages/n1ql-language-reference/createindex.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/createindex.adoc @@ -16,7 +16,7 @@ Secondary indexes contain a filtered or a full set of keys in a given keyspace. :indexing-arrays: xref:n1ql-language-reference/indexing-arrays.adoc :index-partitioning: xref:n1ql-language-reference/index-partitioning.adoc :indexing-meta-info: xref:n1ql-language-reference/indexing-meta-info.adoc -:operator-pushdowns: xref:performance:index_pushdowns.adoc#operator-pushdowns +:operator-pushdowns: xref:indexes:index_pushdowns.adoc#operator-pushdowns :logical-hierarchy: xref:n1ql:n1ql-intro/queriesandresults.adoc#logical-hierarchy :querying-indexes: xref:n1ql-intro/sysinfo.adoc#querying-indexes diff --git a/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc b/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc index aeeda84af..51482d761 100644 --- a/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc @@ -19,7 +19,7 @@ :inserting-a-child-field: xref:fts:fts-creating-indexes.adoc#inserting-a-child-field :pre-constructed-analyzers: xref:fts:fts-using-analyzers.adoc#pre-constructed-analyzers :simple-queries: xref:fts:fts-query-types.adoc#simple-queries -:index_pushdowns: xref:performance:index_pushdowns.adoc +:index_pushdowns: xref:indexes:index_pushdowns.adoc [abstract] {description} diff --git a/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc b/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc index 31af9d4fb..7998e5787 100644 --- a/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc @@ -2627,7 +2627,7 @@ Key Position to use the Index expr or the query expr. == Related Links -* xref:performance:index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:indexes:index-scans.adoc#query-execution-details[Query Execution: Details] * xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] -* xref:performance:index_pushdowns.adoc[Index Pushdown Optimizations] -* xref:performance:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:indexes:index_pushdowns.adoc[Index Pushdown Optimizations] +* xref:indexes:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] diff --git a/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc b/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc index 2417769c9..0f6156434 100644 --- a/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc @@ -157,7 +157,7 @@ The following diagram shows the query execution workflow at a high level and ill .Query Execution Workflow [plantuml,query-execution,svg] .... -include::performance:partial$diagrams/query-execution.puml[] +include::indexes:partial$diagrams/query-execution.puml[] .... The SELECT statement is executed as a sequence of steps. @@ -170,7 +170,7 @@ The following diagram shows the possible elements and operations during query ex .Query Execution Phases [plantuml,query-service,svg] .... -include::performance:partial$diagrams/query-service.puml[] +include::indexes:partial$diagrams/query-service.puml[] .... Some phases are done serially while others are done in parallel, as specified by their parent operator. diff --git a/modules/n1ql/partials/nav.adoc b/modules/n1ql/partials/nav.adoc index 269386853..2807f7c14 100644 --- a/modules/n1ql/partials/nav.adoc +++ b/modules/n1ql/partials/nav.adoc @@ -150,13 +150,13 @@ *** xref:n1ql:n1ql-language-reference/n1ql-auditing.adoc[] *** xref:n1ql:n1ql-language-reference/n1ql-error-codes.adoc[] ** xref:indexes:indexing-overview.adoc[] - *** xref:performance:query-without-index.adoc[] - *** xref:performance:indexing-and-query-perf.adoc[] + *** xref:indexes:query-without-index.adoc[] + *** xref:indexes:indexing-and-query-perf.adoc[] *** xref:n1ql:n1ql-language-reference/covering-indexes.adoc[] - *** xref:performance:index-scans.adoc[] - *** xref:performance:index_pushdowns.adoc[] + *** xref:indexes:index-scans.adoc[] + *** xref:indexes:index_pushdowns.adoc[] *** xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[] - *** xref:performance:early-filters-and-pagination.adoc[] + *** xref:indexes:early-filters-and-pagination.adoc[] *** xref:indexes:index-lifecycle.adoc[] *** xref:indexes:index-replication.adoc[] *** xref:indexes:storage-modes.adoc[] From a484d956c9ba1a14de3facfa24828d239f3f9466 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Fri, 16 Aug 2024 22:43:15 +0100 Subject: [PATCH 19/23] Add performance aliases again --- modules/indexes/pages/index-scans.adoc | 2 +- modules/indexes/pages/index_pushdowns.adoc | 2 +- modules/indexes/pages/indexing-and-query-perf.adoc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/indexes/pages/index-scans.adoc b/modules/indexes/pages/index-scans.adoc index bb19cc46e..d901b3370 100644 --- a/modules/indexes/pages/index-scans.adoc +++ b/modules/indexes/pages/index-scans.adoc @@ -1,7 +1,7 @@ = Index Scans :description: This section discusses how index spans are generated from query predicates and provides a number of examples. :page-topic-type: concept -:page-aliases: learn:services-and-indexes/indexes/index-scans +:page-aliases: learn:services-and-indexes/indexes/index-scans,performance:index-scans :imagesdir: ../images [abstract] diff --git a/modules/indexes/pages/index_pushdowns.adoc b/modules/indexes/pages/index_pushdowns.adoc index 8a65e890d..4bf561bc5 100644 --- a/modules/indexes/pages/index_pushdowns.adoc +++ b/modules/indexes/pages/index_pushdowns.adoc @@ -2,7 +2,7 @@ :description: Index Pushdowns are performance optimizations where the Query engine pushes more of the work down to the Indexer. :imagesdir: ../images :page-topic-type: concept -:page-aliases: learn:services-and-indexes/indexes/index_pushdowns +:page-aliases: learn:services-and-indexes/indexes/index_pushdowns,performance:index_pushdowns [abstract] {description} diff --git a/modules/indexes/pages/indexing-and-query-perf.adoc b/modules/indexes/pages/indexing-and-query-perf.adoc index 71d87e707..9555b62b0 100644 --- a/modules/indexes/pages/indexing-and-query-perf.adoc +++ b/modules/indexes/pages/indexing-and-query-perf.adoc @@ -2,7 +2,7 @@ :navtitle: Types of Index :description: This topic provides an overview of the types of index that you can create using the Index Service, and explains how they help to query for data efficiently and improve query performance. :page-topic-type: concept -:page-aliases: learn:services-and-indexes/indexes/indexing-and-query-perf +:page-aliases: learn:services-and-indexes/indexes/indexing-and-query-perf,performance:indexing-and-query-perf // Cross-references :install-sample-buckets: xref:manage:manage-settings/install-sample-buckets.adoc From 7a1acde41bdc54338a403f4e35650777ac77cd29 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Fri, 16 Aug 2024 23:44:47 +0100 Subject: [PATCH 20/23] Move covering indexes, group agg pushdown --- .../images/GBAP_Ex0_QP_after55.png | Bin .../images/GBAP_Ex0_QP_before55.png | Bin .../assets => indexes}/images/GBAP_Ex10_VP.png | Bin .../assets => indexes}/images/GBAP_Ex2A_EP.png | Bin .../assets => indexes}/images/GBAP_Ex4A_VP.png | Bin .../assets => indexes}/images/GBAP_ExB_Plan.png | Bin .../assets => indexes}/images/GBAP_ExC_Plan.png | Bin .../assets => indexes}/images/GBAP_ExD2_Plan.png | Bin .../assets => indexes}/images/GBAP_ExD_Plan.png | Bin .../assets => indexes}/images/GBAP_ExE_Plan.png | Bin .../pages}/covering-indexes.adoc | 0 .../pages}/groupby-aggregate-performance.adoc | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename modules/{n1ql/assets => indexes}/images/GBAP_Ex0_QP_after55.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_Ex0_QP_before55.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_Ex10_VP.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_Ex2A_EP.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_Ex4A_VP.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_ExB_Plan.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_ExC_Plan.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_ExD2_Plan.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_ExD_Plan.png (100%) rename modules/{n1ql/assets => indexes}/images/GBAP_ExE_Plan.png (100%) rename modules/{n1ql/pages/n1ql-language-reference => indexes/pages}/covering-indexes.adoc (100%) rename modules/{n1ql/pages/n1ql-language-reference => indexes/pages}/groupby-aggregate-performance.adoc (100%) diff --git a/modules/n1ql/assets/images/GBAP_Ex0_QP_after55.png b/modules/indexes/images/GBAP_Ex0_QP_after55.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_Ex0_QP_after55.png rename to modules/indexes/images/GBAP_Ex0_QP_after55.png diff --git a/modules/n1ql/assets/images/GBAP_Ex0_QP_before55.png b/modules/indexes/images/GBAP_Ex0_QP_before55.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_Ex0_QP_before55.png rename to modules/indexes/images/GBAP_Ex0_QP_before55.png diff --git a/modules/n1ql/assets/images/GBAP_Ex10_VP.png b/modules/indexes/images/GBAP_Ex10_VP.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_Ex10_VP.png rename to modules/indexes/images/GBAP_Ex10_VP.png diff --git a/modules/n1ql/assets/images/GBAP_Ex2A_EP.png b/modules/indexes/images/GBAP_Ex2A_EP.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_Ex2A_EP.png rename to modules/indexes/images/GBAP_Ex2A_EP.png diff --git a/modules/n1ql/assets/images/GBAP_Ex4A_VP.png b/modules/indexes/images/GBAP_Ex4A_VP.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_Ex4A_VP.png rename to modules/indexes/images/GBAP_Ex4A_VP.png diff --git a/modules/n1ql/assets/images/GBAP_ExB_Plan.png b/modules/indexes/images/GBAP_ExB_Plan.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_ExB_Plan.png rename to modules/indexes/images/GBAP_ExB_Plan.png diff --git a/modules/n1ql/assets/images/GBAP_ExC_Plan.png b/modules/indexes/images/GBAP_ExC_Plan.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_ExC_Plan.png rename to modules/indexes/images/GBAP_ExC_Plan.png diff --git a/modules/n1ql/assets/images/GBAP_ExD2_Plan.png b/modules/indexes/images/GBAP_ExD2_Plan.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_ExD2_Plan.png rename to modules/indexes/images/GBAP_ExD2_Plan.png diff --git a/modules/n1ql/assets/images/GBAP_ExD_Plan.png b/modules/indexes/images/GBAP_ExD_Plan.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_ExD_Plan.png rename to modules/indexes/images/GBAP_ExD_Plan.png diff --git a/modules/n1ql/assets/images/GBAP_ExE_Plan.png b/modules/indexes/images/GBAP_ExE_Plan.png similarity index 100% rename from modules/n1ql/assets/images/GBAP_ExE_Plan.png rename to modules/indexes/images/GBAP_ExE_Plan.png diff --git a/modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc b/modules/indexes/pages/covering-indexes.adoc similarity index 100% rename from modules/n1ql/pages/n1ql-language-reference/covering-indexes.adoc rename to modules/indexes/pages/covering-indexes.adoc diff --git a/modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc b/modules/indexes/pages/groupby-aggregate-performance.adoc similarity index 100% rename from modules/n1ql/pages/n1ql-language-reference/groupby-aggregate-performance.adoc rename to modules/indexes/pages/groupby-aggregate-performance.adoc From b920ecac467ffeb39e370b9ab61069c49d4161db Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Sat, 17 Aug 2024 00:13:11 +0100 Subject: [PATCH 21/23] Update links to covering indexes, grouping and agg pushdown --- modules/guides/pages/create-index.adoc | 2 +- modules/indexes/pages/covering-indexes.adoc | 12 ++++++------ .../pages/early-filters-and-pagination.adoc | 14 +++++++------- .../pages/groupby-aggregate-performance.adoc | 17 +++++++++-------- modules/indexes/pages/index_pushdowns.adoc | 6 +++--- .../indexes/pages/indexing-and-query-perf.adoc | 2 +- modules/indexes/pages/indexing-overview.adoc | 4 ++-- .../n1ql-language-reference/aggregatefun.adoc | 2 +- .../n1ql-language-reference/flex-indexes.adoc | 2 +- .../pages/n1ql-language-reference/groupby.adoc | 2 +- .../n1ql-language-reference/selectintro.adoc | 2 +- modules/n1ql/partials/nav.adoc | 4 ++-- 12 files changed, 35 insertions(+), 34 deletions(-) diff --git a/modules/guides/pages/create-index.adoc b/modules/guides/pages/create-index.adoc index 4fa256c94..c421df4a9 100644 --- a/modules/guides/pages/create-index.adoc +++ b/modules/guides/pages/create-index.adoc @@ -542,7 +542,7 @@ If a query uses a covering index, the query can get all the data it needs from t To create a covering index, make sure the index includes all the fields and expressions required by the query. -For further details and examples, refer to xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes]. +For further details and examples, refer to xref:indexes:covering-indexes.adoc[Covering Indexes]. == Related Links diff --git a/modules/indexes/pages/covering-indexes.adoc b/modules/indexes/pages/covering-indexes.adoc index 46df8bdb5..d17452d3b 100644 --- a/modules/indexes/pages/covering-indexes.adoc +++ b/modules/indexes/pages/covering-indexes.adoc @@ -1,8 +1,8 @@ = Covering Indexes :description: When an index includes the actual values of all the fields specified in the query, the index covers the query and does not require an additional step to fetch the actual values from the data service. :page-topic-type: concept -:page-aliases: indexes:covering-indexes.adoc -:imagesdir: ../../assets/images +:page-aliases: n1ql:n1ql-language-reference/covering-indexes +:imagesdir: ../images [abstract] {description} @@ -467,7 +467,7 @@ The query plan for the above query shows that the index covers the query. == Related Links -* xref:indexes:index-scans.adoc#query-execution-details[Query Execution: Details] -* xref:indexes:index_pushdowns.adoc[Index Pushdown Optimizations] -* xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] -* xref:indexes:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:index_pushdowns.adoc[] +* xref:groupby-aggregate-performance.adoc[] +* xref:early-filters-and-pagination.adoc[] diff --git a/modules/indexes/pages/early-filters-and-pagination.adoc b/modules/indexes/pages/early-filters-and-pagination.adoc index eb8b7ef33..927ddcbe2 100644 --- a/modules/indexes/pages/early-filters-and-pagination.adoc +++ b/modules/indexes/pages/early-filters-and-pagination.adoc @@ -16,7 +16,7 @@ include::ROOT:partial$query-context.adoc[tag=statement] == Overview -If a query has a xref:n1ql:n1ql-language-reference/covering-indexes.adoc[covering index], and the query is on a single keyspace, then the index contains all the data needed to perform the query. +If a query has a xref:covering-indexes.adoc[covering index], and the query is on a single keyspace, then the index contains all the data needed to perform the query. The Query service does not need to fetch data from the Data service. Any filters, order, or pagination (offset and limit) are performed by the Index service. @@ -488,9 +488,9 @@ NOTE: An uncovered query may use a mixture of these methods. == Related Links * xref:index-scans.adoc#query-execution-details[Query Execution: Details] -* xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] -* xref:index_pushdowns.adoc[Index Pushdown Optimizations] -* xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] -* xref:n1ql:n1ql-language-reference/where.adoc[WHERE Clause] -- to apply a filter -* xref:n1ql:n1ql-language-reference/orderby.adoc[ORDER BY Clause] -- to apply a sort -* xref:n1ql:n1ql-language-reference/offset.adoc[OFFSET Clause] and xref:n1ql:n1ql-language-reference/limit.adoc[LIMIT Clause] -- to apply pagination +* xref:covering-indexes.adoc[] +* xref:index_pushdowns.adoc[] +* xref:groupby-aggregate-performance.adoc[] +* xref:n1ql:n1ql-language-reference/where.adoc[] -- to apply a filter +* xref:n1ql:n1ql-language-reference/orderby.adoc[] -- to apply a sort +* xref:n1ql:n1ql-language-reference/offset.adoc[] and xref:n1ql:n1ql-language-reference/limit.adoc[] -- to apply pagination diff --git a/modules/indexes/pages/groupby-aggregate-performance.adoc b/modules/indexes/pages/groupby-aggregate-performance.adoc index 7998e5787..3ef21e30f 100644 --- a/modules/indexes/pages/groupby-aggregate-performance.adoc +++ b/modules/indexes/pages/groupby-aggregate-performance.adoc @@ -1,7 +1,8 @@ = Grouping and Aggregate Pushdowns :description: {sqlpp} Pushdowns optimize the performance of {sqlpp} queries by supporting grouping and aggregate expressions. :page-edition: enterprise edition -:imagesdir: ../../assets/images +:page-aliases: n1ql:n1ql-language-reference/groupby-aggregate-performance +:imagesdir: ../images [abstract] {description} @@ -19,10 +20,10 @@ Grouping and aggregate pushdown improves the performance of {sqlpp} queries with After the optimizer selects an index for a query block, it attempts the two optimizations below: * Pagination optimization, by pushing the OFFSET and LIMIT parameters to the index scan. -* Grouping and aggregate pushdown to the indexer (introduced in Couchbase 5.5). +* Grouping and aggregate pushdown to the indexer. -Prior to Couchbase Server 5.5, when a query contained aggregation and/or grouping, the query engine would fetch all relevant data from the indexer and group the data itself, even if the query was covered by an index. -With Couchbase Server 5.5 (Enterprise Edition) and later, the query intelligently requests the indexer to perform grouping and aggregation in addition to range scan. +Without grouping and aggregate pushdown, if a query contained aggregation and/or grouping, the query engine would fetch all relevant data from the indexer and group the data itself, even if the query was covered by an index. +With grouping and aggregate pushdown, the query intelligently requests the indexer to perform grouping and aggregation in addition to range scan. The Indexer has been enhanced to perform grouping, COUNT(), SUM(), MIN(), MAX(), AVG(), and related operations. You do not need to make any changes to the query to use this feature, but a good index design is required to cover the query and order the keys. @@ -2627,7 +2628,7 @@ Key Position to use the Index expr or the query expr. == Related Links -* xref:indexes:index-scans.adoc#query-execution-details[Query Execution: Details] -* xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] -* xref:indexes:index_pushdowns.adoc[Index Pushdown Optimizations] -* xref:indexes:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:index-scans.adoc#query-execution-details[Query Execution: Details] +* xref:covering-indexes.adoc[] +* xref:index_pushdowns.adoc[] +* xref:early-filters-and-pagination.adoc[] diff --git a/modules/indexes/pages/index_pushdowns.adoc b/modules/indexes/pages/index_pushdowns.adoc index 4bf561bc5..32471aea2 100644 --- a/modules/indexes/pages/index_pushdowns.adoc +++ b/modules/indexes/pages/index_pushdowns.adoc @@ -633,6 +633,6 @@ include::example$pushdown-distinct.jsonc[tag=excerpt] == Related Links * xref:index-scans.adoc#query-execution-details[Query Execution: Details] -* xref:n1ql:n1ql-language-reference/covering-indexes.adoc[Covering Indexes] -* xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Grouping and Aggregate Pushdown] -* xref:early-filters-and-pagination.adoc[Early Filters, Ordering and Pagination] +* xref:covering-indexes.adoc[] +* xref:groupby-aggregate-performance.adoc[] +* xref:early-filters-and-pagination.adoc[] diff --git a/modules/indexes/pages/indexing-and-query-perf.adoc b/modules/indexes/pages/indexing-and-query-perf.adoc index 9555b62b0..3fe1cbe87 100644 --- a/modules/indexes/pages/indexing-and-query-perf.adoc +++ b/modules/indexes/pages/indexing-and-query-perf.adoc @@ -8,7 +8,7 @@ :install-sample-buckets: xref:manage:manage-settings/install-sample-buckets.adoc :aggregatefun: xref:n1ql:n1ql-language-reference/aggregatefun.adoc :indexing-arrays: xref:n1ql:n1ql-language-reference/indexing-arrays.adoc -:covering-indexes: xref:n1ql:n1ql-language-reference/covering-indexes.adoc +:covering-indexes: xref:covering-indexes.adoc :bucket-analyzer: xref:tools:query-workbench.adoc#bucket-analyzer :storage-modes: xref:indexes:storage-modes.adoc :additional-storage-use: xref:learn:data/transactions.adoc#additional-storage-use diff --git a/modules/indexes/pages/indexing-overview.adoc b/modules/indexes/pages/indexing-overview.adoc index 43ccabb49..6b21fd77d 100644 --- a/modules/indexes/pages/indexing-overview.adoc +++ b/modules/indexes/pages/indexing-overview.adoc @@ -24,10 +24,10 @@ endif::[] * xref:query-without-index.adoc[] * xref:indexing-and-query-perf.adoc[] -* xref:n1ql:n1ql-language-reference/covering-indexes.adoc[] +* xref:covering-indexes.adoc[] * xref:index-scans.adoc[] * xref:index_pushdowns.adoc[] -* xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[] +* xref:groupby-aggregate-performance.adoc[] * xref:early-filters-and-pagination.adoc[] == Index Commands diff --git a/modules/n1ql/pages/n1ql-language-reference/aggregatefun.adoc b/modules/n1ql/pages/n1ql-language-reference/aggregatefun.adoc index 12c49e29b..476d6f6b8 100644 --- a/modules/n1ql/pages/n1ql-language-reference/aggregatefun.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/aggregatefun.adoc @@ -101,7 +101,7 @@ The conditional expression is subject to the same rules as the conditional expre It may not contain a subquery, a window function, or an outer reference. NOTE: If the query block contains an aggregate function which uses the FILTER clause, the aggregation is not pushed down to the indexer. -Refer to xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc#filter-clause[Grouping and Aggregate Pushdown] for more details. +Refer to xref:indexes:groupby-aggregate-performance.adoc#filter-clause[] for more details. [[over-clause]] === OVER Clause diff --git a/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc b/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc index 51482d761..a97f22b7a 100644 --- a/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/flex-indexes.adoc @@ -13,7 +13,7 @@ :index-type: xref:n1ql-language-reference/hints.adoc#index-type :isstring: xref:n1ql-language-reference/typefun.adoc#isstring :isnumber: xref:n1ql-language-reference/typefun.adoc#isnumber -:covering-indexes: xref:n1ql:n1ql-language-reference/covering-indexes.adoc +:covering-indexes: xref:indexes:covering-indexes.adoc :query-settings: xref:n1ql:n1ql-manage/query-settings.adoc :fts-creating-indexes: xref:fts:fts-creating-indexes.adoc :inserting-a-child-field: xref:fts:fts-creating-indexes.adoc#inserting-a-child-field diff --git a/modules/n1ql/pages/n1ql-language-reference/groupby.adoc b/modules/n1ql/pages/n1ql-language-reference/groupby.adoc index 82828b54f..171f6eda0 100644 --- a/modules/n1ql/pages/n1ql-language-reference/groupby.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/groupby.adoc @@ -265,4 +265,4 @@ The alias in the `GROUP BY` clause enables you to refer to the `CASE` expression == Related Links -* For further examples, refer to xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Group By and Aggregate Performance]. +* For further examples, refer to xref:indexes:groupby-aggregate-performance.adoc[]. diff --git a/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc b/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc index 0f6156434..fabc6b12e 100644 --- a/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/selectintro.adoc @@ -802,4 +802,4 @@ include::example$n1ql-language-reference/explain-idx-include.jsonc[tags=include; <.> In this case, since the lead key in the index includes MISSING values, the optimizer correctly chooses the `idx_airport_include` index. ==== -For further examples, refer to xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[Group By and Aggregate Performance]. +For further examples, refer to xref:indexes:groupby-aggregate-performance.adoc[]. diff --git a/modules/n1ql/partials/nav.adoc b/modules/n1ql/partials/nav.adoc index 2807f7c14..5d2971d17 100644 --- a/modules/n1ql/partials/nav.adoc +++ b/modules/n1ql/partials/nav.adoc @@ -152,10 +152,10 @@ ** xref:indexes:indexing-overview.adoc[] *** xref:indexes:query-without-index.adoc[] *** xref:indexes:indexing-and-query-perf.adoc[] - *** xref:n1ql:n1ql-language-reference/covering-indexes.adoc[] + *** xref:indexes:covering-indexes.adoc.adoc[] *** xref:indexes:index-scans.adoc[] *** xref:indexes:index_pushdowns.adoc[] - *** xref:n1ql:n1ql-language-reference/groupby-aggregate-performance.adoc[] + *** xref:indexes:groupby-aggregate-performance.adoc[] *** xref:indexes:early-filters-and-pagination.adoc[] *** xref:indexes:index-lifecycle.adoc[] *** xref:indexes:index-replication.adoc[] From 29c93d037677ad89678814a1566e759bad6abb09 Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Sat, 17 Aug 2024 00:13:22 +0100 Subject: [PATCH 22/23] Driveby fix broken link --- modules/guides/pages/create-index.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/guides/pages/create-index.adoc b/modules/guides/pages/create-index.adoc index c421df4a9..a23efc8a5 100644 --- a/modules/guides/pages/create-index.adoc +++ b/modules/guides/pages/create-index.adoc @@ -532,7 +532,7 @@ include::indexes:example$create-idx-partial.n1ql[] ---- ==== -For further details and examples, refer to xref:n1ql:n1ql-language-reference/indexing-and-query-perf.adoc#partial-index[Partial Index]. +For further details and examples, refer to xref:indexes:indexing-and-query-perf.adoc#partial-index[Partial Index]. === Creating a Covering Index From 50bfc6dfa3486266a15b99e38f4b1108525ce17d Mon Sep 17 00:00:00 2001 From: Simon Dew Date: Mon, 19 Aug 2024 17:01:46 +0100 Subject: [PATCH 23/23] Updates after preliminary checks --- modules/guides/pages/place-index.adoc | 2 +- modules/indexes/pages/index_pushdowns.adoc | 25 +++++++++++----------- modules/indexes/pages/storage-modes.adoc | 2 +- modules/n1ql/partials/nav.adoc | 2 +- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/modules/guides/pages/place-index.adoc b/modules/guides/pages/place-index.adoc index f34b7d549..5ea4f35d3 100644 --- a/modules/guides/pages/place-index.adoc +++ b/modules/guides/pages/place-index.adoc @@ -166,7 +166,7 @@ For further details and examples, refer to xref:n1ql:n1ql-language-reference/alt Reference and explanation: -* xref:indexes:indexing-overview.adoc[Using Indexes] +* xref:indexes:indexing-overview.adoc[] Administrator guides: diff --git a/modules/indexes/pages/index_pushdowns.adoc b/modules/indexes/pages/index_pushdowns.adoc index 32471aea2..26d367c12 100644 --- a/modules/indexes/pages/index_pushdowns.adoc +++ b/modules/indexes/pages/index_pushdowns.adoc @@ -98,18 +98,17 @@ The `span` and `range` from the EXPLAIN output of <>. include::example$pushdown-simple.jsonc[tag=predicate] ---- -* Each Span defines details about one index-key summarizing corresponding predicate conditions into a range-scan lookup for the index. +* Each span defines details about one index-key summarizing corresponding predicate conditions into a range-scan lookup for the index. In this example, the predicate condition (`sourceairport = "SFO"`) translates to one span with one range that specifies both `low` and `high` values of "SFO" (to imply equals condition). -* Refer to section xref:index-scans.adoc[Scans] for more information. +* Refer to section xref:index-scans.adoc[] for more information. ==== == Composite Predicate Pushdown Compound or composite predicates are those with multiple conditions on different fields of the document. -When the predicate is conjunctive with multiple AND conditions, then a single `span` with multiple `ranges` are specified in the index-scan request. -When the predicate is disjunctive, then multiple `spans` are specified. -See xref:index-scans.adoc[Scans] -for more details and examples on how predicate pushdown works for various types of index-scans as well as the conjunctive predicate AND and the disjunctive predicate OR. +When the predicate is conjunctive with multiple `AND` conditions, then a single span with multiple ranges is specified in the index-scan request. +When the predicate is disjunctive, then multiple spans are specified. +See xref:index-scans.adoc[] for more details and examples on how predicate pushdown works for various types of index-scans, as well as the conjunctive predicate `AND` and the disjunctive predicate `OR`. === Index Key Order and Structure @@ -121,7 +120,7 @@ For example, consider the following hypothetical index: CREATE INDEX `idx_age_name` ON users(age, name); ---- -image::IndexKeyOrder.png[,570] +image::IndexKeyOrder.png["Order of keys in a composite index",570] Various age and name values are stored in the index in a tree-like structure, represented in simplified form in the diagram above, with all the index key values linearly sorted as ordered pairs. For instance, @@ -446,10 +445,10 @@ In such cases, the Query engine pushes down necessary hints or options to the In === MAX() Pushdown -This function returns the highest value of the input field based on the default collation rules. (For details, see xref:n1ql:n1ql-language-reference/datatypes.adoc[Data types] and xref:n1ql:n1ql-language-reference/comparisonops.adoc[Comparison Operators].) +This function returns the highest value of the input field based on the default collation rules. +(For details, see xref:n1ql:n1ql-language-reference/datatypes.adoc[] and xref:n1ql:n1ql-language-reference/comparisonops.adoc[].) -Prior to Couchbase Server 5.5, MAX() could be pushed to the Indexer only when the index was created with matching index keys in descending order. -This limitation has been removed in Couchbase Server 5.5 and later. +You do not need to create the index with the matching index keys sorted in descending order to push MAX() to the Indexer. .MAX of a String Field ==== @@ -480,10 +479,10 @@ include::example$pushdown-max.jsonc[tag=excerpt] === MIN() Pushdown -This function returns the lowest value of the input field based on the default collation rules. (For details, see xref:n1ql:n1ql-language-reference/datatypes.adoc[Data types] and xref:n1ql:n1ql-language-reference/comparisonops.adoc[Comparison Operators].) +This function returns the lowest value of the input field based on the default collation rules. +(For details, see xref:n1ql:n1ql-language-reference/datatypes.adoc[] and xref:n1ql:n1ql-language-reference/comparisonops.adoc[].) -Prior to Couchbase Server 5.5, MIN() could be pushed to the Indexer only when the index was created with matching index keys in ascending order. -This limitation has been removed in Couchbase Server 5.5 and later. +You do not need to create the index with the matching index keys sorted in ascending order to push MIN() to the Indexer. .MIN of a String Field ==== diff --git a/modules/indexes/pages/storage-modes.adoc b/modules/indexes/pages/storage-modes.adoc index 258a7c09c..ff030c43b 100644 --- a/modules/indexes/pages/storage-modes.adoc +++ b/modules/indexes/pages/storage-modes.adoc @@ -139,7 +139,7 @@ The consequent reduction in disk reads promotes the efficiency of mutation proce Bloom filters can be enabled or disabled by means of the Couchbase Web Console UI, or the REST API. See the information provided on establishing xref:manage:manage-settings/general-settings.adoc[General] settings for the cluster. -include::server:manage:manage-settings/general-settings.adoc[tag=bloom-filter-defaulte] +include::manage:manage-settings/general-settings.adoc[tag=bloom-filter-default] === In-Memory Compression diff --git a/modules/n1ql/partials/nav.adoc b/modules/n1ql/partials/nav.adoc index 5d2971d17..adc7e548e 100644 --- a/modules/n1ql/partials/nav.adoc +++ b/modules/n1ql/partials/nav.adoc @@ -152,7 +152,7 @@ ** xref:indexes:indexing-overview.adoc[] *** xref:indexes:query-without-index.adoc[] *** xref:indexes:indexing-and-query-perf.adoc[] - *** xref:indexes:covering-indexes.adoc.adoc[] + *** xref:indexes:covering-indexes.adoc[] *** xref:indexes:index-scans.adoc[] *** xref:indexes:index_pushdowns.adoc[] *** xref:indexes:groupby-aggregate-performance.adoc[]