This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 058922f3879 [doc] Add Before You Start the POC guide to 3.x and 4.x 
(#3470)
058922f3879 is described below

commit 058922f3879554fe63573e16df24777daf19605b
Author: Yongqiang YANG <[email protected]>
AuthorDate: Tue Mar 17 05:44:44 2026 -0700

    [doc] Add Before You Start the POC guide to 3.x and 4.x (#3470)
    
    ## Summary
    - Add `before-you-start-the-poc.md` (EN + ZH) to versioned docs for 3.x
    and 4.x
    - Register the new page in both `version-3.x-sidebars.json` and
    `version-4.x-sidebars.json`
    - Content is identical to the `current` version from the `before_poc`
    branch
    
    ## Test plan
    - [ ] Verify the page renders correctly under 3.x docs
    - [ ] Verify the page renders correctly under 4.x docs
    - [ ] Verify sidebar shows "Before You Start the POC" in Getting Started
    for both versions
    - [ ] Verify both EN and ZH versions display properly
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
---
 .../gettingStarted/before-you-start-the-poc.md     | 115 +++++++++++++++++++++
 .../gettingStarted/before-you-start-the-poc.md     | 115 +++++++++++++++++++++
 .../gettingStarted/before-you-start-the-poc.md     | 115 +++++++++++++++++++++
 .../gettingStarted/before-you-start-the-poc.md     | 115 +++++++++++++++++++++
 versioned_sidebars/version-3.x-sidebars.json       |   1 +
 versioned_sidebars/version-4.x-sidebars.json       |   1 +
 6 files changed, 462 insertions(+)

diff --git 
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x/gettingStarted/before-you-start-the-poc.md
 
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x/gettingStarted/before-you-start-the-poc.md
new file mode 100644
index 00000000000..bf1a6570d66
--- /dev/null
+++ 
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-3.x/gettingStarted/before-you-start-the-poc.md
@@ -0,0 +1,115 @@
+---
+{
+    "title": "POC 前必读",
+    "language": "zh-CN",
+    "description": "新用户在 Apache Doris 建表设计、数据导入和查询调优中常见的问题。",
+    "sidebar_label": "POC 前必读"
+}
+---
+
+# POC 前必读
+
+本文档汇总了新用户常见的问题,旨在加速 POC 进程。
+
+## 建表设计
+
+在 Doris 中建表涉及四个影响导入和查询性能的决策。
+
+### 数据模型
+
+| 数据特征 | 使用 | 原因 |
+|---|---|---|
+| 仅追加(日志、事件、事实表) | **Duplicate Key**(默认) | 保留所有行。查询性能最好。 |
+| 按主键更新(CDC、Upsert) | **Unique Key** | 新行按相同 Key 替换旧行。 |
+| 预聚合指标(PV、UV、汇总) | **Aggregate Key** | 写入时按 SUM/MAX/MIN 合并行。 |
+
+**Duplicate Key 适用于大多数场景。**详见[数据模型概述](../table-design/data-model/overview)。
+
+### Sort Key(排序键)
+
+将最常用于过滤的列放在最前面,定长类型(INT、BIGINT、DATE)放在 VARCHAR 之前。Doris 在排序键的前 36 
字节上构建[前缀索引](../table-design/index/prefix-index),但遇到 VARCHAR 
会立即截断。其他需要快速过滤的列可添加倒排索引。
+
+### 分区
+
+如果有时间列,使用 `AUTO PARTITION BY RANGE(date_trunc(time_col, 'day'))` 
启用[分区裁剪](../table-design/data-partitioning/auto-partitioning)。Doris 会自动跳过无关分区。
+
+### 分桶
+
+默认是 **Random 分桶**(推荐用于 Duplicate Key 表)。如果频繁按某列过滤或 JOIN,使用 `DISTRIBUTED BY 
HASH(该列)`。详见[数据分桶](../table-design/data-partitioning/data-bucketing)。
+
+**如何选择分桶数:**
+
+1. **设为 BE 数量的整数倍**,确保数据均匀分布。后续扩容 BE 时,查询通常涉及多个分区,性能不会受影响。
+2. **尽可能少**,避免小文件。
+3. **每个分桶的压缩后数据 ≤ 20 GB**(Unique Key 表 ≤ 10 GB)。可通过 `SHOW TABLETS FROM 
your_table` 查看。
+4. **每个分区不超过 128 个分桶。**需要更多时优先考虑分区。极端情况下上限为 1024,但生产环境中很少需要。
+
+### 建表模板
+
+#### 日志 / 事件分析
+
+```sql
+CREATE TABLE app_logs
+(
+    log_time      DATETIME    NOT NULL,
+    log_level     VARCHAR(10),
+    service_name  VARCHAR(50),
+    trace_id      VARCHAR(64),
+    message       STRING,
+    INDEX idx_message (message) USING INVERTED PROPERTIES("parser" = "unicode")
+)
+AUTO PARTITION BY RANGE(date_trunc(`log_time`, 'day'))
+()
+DISTRIBUTED BY RANDOM BUCKETS 10;
+```
+
+#### 实时看板与 Upsert(CDC)
+
+```sql
+CREATE TABLE user_profiles
+(
+    user_id       BIGINT      NOT NULL,
+    username      VARCHAR(50),
+    email         VARCHAR(100),
+    status        TINYINT,
+    updated_at    DATETIME
+)
+UNIQUE KEY(user_id)
+DISTRIBUTED BY HASH(user_id) BUCKETS 10;
+```
+
+#### 指标聚合
+
+```sql
+CREATE TABLE site_metrics
+(
+    dt            DATE        NOT NULL,
+    site_id       INT         NOT NULL,
+    pv            BIGINT      SUM DEFAULT '0',
+    uv            BIGINT      MAX DEFAULT '0'
+)
+AGGREGATE KEY(dt, site_id)
+AUTO PARTITION BY RANGE(date_trunc(`dt`, 'day'))
+()
+DISTRIBUTED BY HASH(site_id) BUCKETS 10;
+```
+
+## 性能陷阱
+
+### 导入
+
+- **批量数据不要用 `INSERT INTO VALUES`。**请使用 [Stream 
Load](../data-operate/import/import-way/stream-load-manual) 或 [Broker 
Load](../data-operate/import/import-way/broker-load-manual)。详见[导入概述](../data-operate/import/load-manual)。
+- **优先在客户端合并写入。**高频小批次导入导致版本堆积。如不可行,使用 [Group 
Commit](../data-operate/import/group-commit-manual)。
+- **将大型导入拆分为小批次。**长时间运行的导入失败后必须从头重试。使用 INSERT INTO SELECT 配合 S3 TVF 实现增量导入。
+- **Random 分桶的 Duplicate Key 表启用 `load_to_single_tablet`**,减少写放大。
+
+详见[导入最佳实践](../data-operate/import/load-best-practices)。
+
+### 查询
+
+- **避免数据倾斜。**通过 `SHOW TABLETS` 检查 tablet 大小。差异明显时切换为 Random 分桶或选择基数更高的分桶列。
+- **不要分桶过多。**过多的小 tablet 会产生调度开销,查询性能最多可下降 50%。参见[分桶](#分桶)了解分桶数选择。
+- **不要分桶过少。**过少的 tablet 会限制 CPU 并行度。参见[分桶](#分桶)了解分桶数选择。
+- **正确设置排序键。**与 PostgreSQL 等系统不同,Doris 仅对排序键的前 36 字节建立索引,且遇到 VARCHAR 
会立即截断。超出前缀范围的列无法从排序键受益,需添加倒排索引。参见 [Sort Key(排序键)](#sort-key排序键)。
+
+诊断慢查询请使用 [Query 
Profile](../admin-manual/open-api/fe-http/query-profile-action)。
diff --git 
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/gettingStarted/before-you-start-the-poc.md
 
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/gettingStarted/before-you-start-the-poc.md
new file mode 100644
index 00000000000..11b5c960f97
--- /dev/null
+++ 
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/gettingStarted/before-you-start-the-poc.md
@@ -0,0 +1,115 @@
+---
+{
+    "title": "POC 前必读",
+    "language": "zh-CN",
+    "description": "新用户在 Apache Doris 建表设计、数据导入和查询调优中常见的问题。",
+    "sidebar_label": "POC 前必读"
+}
+---
+
+# POC 前必读
+
+本文档汇总了新用户常见的问题,旨在加速 POC 进程。
+
+## 建表设计
+
+在 Doris 中建表涉及四个影响导入和查询性能的决策。
+
+### 数据模型
+
+| 数据特征 | 使用 | 原因 |
+|---|---|---|
+| 仅追加(日志、事件、事实表) | **Duplicate Key**(默认) | 保留所有行。查询性能最好。 |
+| 按主键更新(CDC、Upsert) | **Unique Key** | 新行按相同 Key 替换旧行。 |
+| 预聚合指标(PV、UV、汇总) | **Aggregate Key** | 写入时按 SUM/MAX/MIN 合并行。 |
+
+**Duplicate Key 适用于大多数场景。**详见[数据模型概述](../table-design/data-model/overview)。
+
+### Sort Key(排序键)
+
+将最常用于过滤的列放在最前面,定长类型(INT、BIGINT、DATE)放在 VARCHAR 之前。Doris 在排序键的前 36 
字节上构建[前缀索引](../table-design/index/prefix-index),但遇到 VARCHAR 
会立即截断。其他需要快速过滤的列可添加[倒排索引](../table-design/index/inverted-index/overview)。
+
+### 分区
+
+如果有时间列,使用 `AUTO PARTITION BY RANGE(date_trunc(time_col, 'day'))` 
启用[分区裁剪](../table-design/data-partitioning/auto-partitioning)。Doris 会自动跳过无关分区。
+
+### 分桶
+
+默认是 **Random 分桶**(推荐用于 Duplicate Key 表)。如果频繁按某列过滤或 JOIN,使用 `DISTRIBUTED BY 
HASH(该列)`。详见[数据分桶](../table-design/data-partitioning/data-bucketing)。
+
+**如何选择分桶数:**
+
+1. **设为 BE 数量的整数倍**,确保数据均匀分布。后续扩容 BE 时,查询通常涉及多个分区,性能不会受影响。
+2. **尽可能少**,避免小文件。
+3. **每个分桶的压缩后数据 ≤ 20 GB**(Unique Key 表 ≤ 10 GB)。可通过 `SHOW TABLETS FROM 
your_table` 查看。
+4. **每个分区不超过 128 个分桶。**需要更多时优先考虑分区。极端情况下上限为 1024,但生产环境中很少需要。
+
+### 建表模板
+
+#### 日志 / 事件分析
+
+```sql
+CREATE TABLE app_logs
+(
+    log_time      DATETIME    NOT NULL,
+    log_level     VARCHAR(10),
+    service_name  VARCHAR(50),
+    trace_id      VARCHAR(64),
+    message       STRING,
+    INDEX idx_message (message) USING INVERTED PROPERTIES("parser" = "unicode")
+)
+AUTO PARTITION BY RANGE(date_trunc(`log_time`, 'day'))
+()
+DISTRIBUTED BY RANDOM BUCKETS 10;
+```
+
+#### 实时看板与 Upsert(CDC)
+
+```sql
+CREATE TABLE user_profiles
+(
+    user_id       BIGINT      NOT NULL,
+    username      VARCHAR(50),
+    email         VARCHAR(100),
+    status        TINYINT,
+    updated_at    DATETIME
+)
+UNIQUE KEY(user_id)
+DISTRIBUTED BY HASH(user_id) BUCKETS 10;
+```
+
+#### 指标聚合
+
+```sql
+CREATE TABLE site_metrics
+(
+    dt            DATE        NOT NULL,
+    site_id       INT         NOT NULL,
+    pv            BIGINT      SUM DEFAULT '0',
+    uv            BIGINT      MAX DEFAULT '0'
+)
+AGGREGATE KEY(dt, site_id)
+AUTO PARTITION BY RANGE(date_trunc(`dt`, 'day'))
+()
+DISTRIBUTED BY HASH(site_id) BUCKETS 10;
+```
+
+## 性能陷阱
+
+### 导入
+
+- **批量数据不要用 `INSERT INTO VALUES`。**请使用 [Stream 
Load](../data-operate/import/import-way/stream-load-manual) 或 [Broker 
Load](../data-operate/import/import-way/broker-load-manual)。详见[导入概述](../data-operate/import/load-manual)。
+- **优先在客户端合并写入。**高频小批次导入导致版本堆积。如不可行,使用 [Group 
Commit](../data-operate/import/group-commit-manual)。
+- **将大型导入拆分为小批次。**长时间运行的导入失败后必须从头重试。使用 [INSERT INTO SELECT 配合 S3 
TVF](../data-operate/import/streaming-job/streaming-job-tvf) 实现增量导入。
+- **Random 分桶的 Duplicate Key 表启用 `load_to_single_tablet`**,减少写放大。
+
+详见[导入最佳实践](../data-operate/import/load-best-practices)。
+
+### 查询
+
+- **避免数据倾斜。**通过 `SHOW TABLETS` 检查 tablet 大小。差异明显时切换为 Random 分桶或选择基数更高的分桶列。
+- **不要分桶过多。**过多的小 tablet 会产生调度开销,查询性能最多可下降 50%。参见[分桶](#分桶)了解分桶数选择。
+- **不要分桶过少。**过少的 tablet 会限制 CPU 并行度。参见[分桶](#分桶)了解分桶数选择。
+- **正确设置排序键。**与 PostgreSQL 等系统不同,Doris 仅对排序键的前 36 字节建立索引,且遇到 VARCHAR 
会立即截断。超出前缀范围的列无法从排序键受益,需添加[倒排索引](../table-design/index/inverted-index/overview)。参见
 [Sort Key(排序键)](#sort-key排序键)。
+
+诊断慢查询请使用 [Query Profile](../query-acceleration/query-profile)。
diff --git 
a/versioned_docs/version-3.x/gettingStarted/before-you-start-the-poc.md 
b/versioned_docs/version-3.x/gettingStarted/before-you-start-the-poc.md
new file mode 100644
index 00000000000..a3c040b183c
--- /dev/null
+++ b/versioned_docs/version-3.x/gettingStarted/before-you-start-the-poc.md
@@ -0,0 +1,115 @@
+---
+{
+    "title": "Before You Start the POC",
+    "language": "en",
+    "description": "Common issues new users encounter with table design, data 
loading, and query tuning in Apache Doris.",
+    "sidebar_label": "Before You Start the POC"
+}
+---
+
+# Before You Start the POC
+
+This document highlights common issues that new users may encounter, with the 
goal of accelerating the POC process.
+
+## Table Design
+
+Creating a table in Doris involves four decisions that affect load and query 
performance.
+
+### Data Model
+
+| If your data is... | Use | Why |
+|---|---|---|
+| Append-only (logs, events, facts) | **Duplicate Key** (default) | Keeps all 
rows. Best query performance. |
+| Updated by primary key (CDC, upsert) | **Unique Key** | New rows replace old 
rows with the same key. |
+| Pre-aggregated metrics (PV, UV, sums) | **Aggregate Key** | Rows are merged 
with SUM/MAX/MIN at write time. |
+
+**Duplicate Key works for most scenarios.** See [Data Model 
Overview](../table-design/data-model/overview).
+
+### Sort Key
+
+Put the column you filter on most frequently first, with fixed-size types 
(INT, BIGINT, DATE) before VARCHAR. Doris builds a [prefix 
index](../table-design/index/prefix-index) on the first 36 bytes of key columns 
but stops at the first VARCHAR. Add [inverted 
indexes](../table-design/index/inverted-index) for other columns that need fast 
filtering.
+
+### Partitioning
+
+If you have a time column, use `AUTO PARTITION BY RANGE(date_trunc(time_col, 
'day'))` to enable [partition 
pruning](../table-design/data-partitioning/auto-partitioning). Doris skips 
irrelevant partitions automatically.
+
+### Bucketing
+
+Default is **Random bucketing** (recommended for Duplicate Key tables). Use 
`DISTRIBUTED BY HASH(col)` if you frequently filter or join on a specific 
column. See [Data Bucketing](../table-design/data-partitioning/data-bucketing).
+
+**How to choose bucket count:**
+
+1. **Multiple of BE count** to ensure even data distribution. When BEs are 
added later, queries typically scan multiple partitions, so performance holds 
up.
+2. **As low as possible** to avoid small files.
+3. **Compressed data per bucket ≤ 20 GB** (≤ 10 GB for Unique Key). Check with 
`SHOW TABLETS FROM your_table`.
+4. **No more than 128 per partition.** Consider partitioning first if you need 
more. In extreme cases the upper bound is 1024, but this is rarely needed in 
production.
+
+### Example Templates
+
+#### Log / Event Analytics
+
+```sql
+CREATE TABLE app_logs
+(
+    log_time      DATETIME    NOT NULL,
+    log_level     VARCHAR(10),
+    service_name  VARCHAR(50),
+    trace_id      VARCHAR(64),
+    message       STRING,
+    INDEX idx_message (message) USING INVERTED PROPERTIES("parser" = "unicode")
+)
+AUTO PARTITION BY RANGE(date_trunc(`log_time`, 'day'))
+()
+DISTRIBUTED BY RANDOM BUCKETS 10;
+```
+
+#### Real-Time Dashboard with Upsert (CDC)
+
+```sql
+CREATE TABLE user_profiles
+(
+    user_id       BIGINT      NOT NULL,
+    username      VARCHAR(50),
+    email         VARCHAR(100),
+    status        TINYINT,
+    updated_at    DATETIME
+)
+UNIQUE KEY(user_id)
+DISTRIBUTED BY HASH(user_id) BUCKETS 10;
+```
+
+#### Metrics Aggregation
+
+```sql
+CREATE TABLE site_metrics
+(
+    dt            DATE        NOT NULL,
+    site_id       INT         NOT NULL,
+    pv            BIGINT      SUM DEFAULT '0',
+    uv            BIGINT      MAX DEFAULT '0'
+)
+AGGREGATE KEY(dt, site_id)
+AUTO PARTITION BY RANGE(date_trunc(`dt`, 'day'))
+()
+DISTRIBUTED BY HASH(site_id) BUCKETS 10;
+```
+
+## Performance Pitfalls
+
+### Load
+
+- **Don't use `INSERT INTO VALUES` for bulk data.** Use [Stream 
Load](../data-operate/import/import-way/stream-load-manual) or [Broker 
Load](../data-operate/import/import-way/broker-load-manual) instead. See 
[Loading Overview](../data-operate/import/load-manual).
+- **Batch writes on the client side.** High-frequency small imports cause 
version accumulation. If not feasible, use [Group 
Commit](../data-operate/import/group-commit-manual).
+- **Break large imports into smaller batches.** A failed long-running import 
must restart from scratch. Use INSERT INTO SELECT with S3 TVF for incremental 
import.
+- **Enable `load_to_single_tablet`** for Duplicate Key tables with Random 
bucketing to reduce write amplification.
+
+See [Load Best Practices](../data-operate/import/load-best-practices).
+
+### Query
+
+- **Avoid data skew.** Check tablet sizes with `SHOW TABLETS`. Switch to 
Random bucketing or a higher-cardinality bucket column if sizes vary 
significantly.
+- **Don't over-bucket.** Too many small tablets create scheduling overhead and 
can degrade query performance by up to 50%. See [Bucketing](#bucketing) for 
sizing guidelines.
+- **Don't under-bucket.** Too few tablets limit CPU parallelism. See 
[Bucketing](#bucketing) for sizing guidelines.
+- **Put the right columns in the sort key.** Unlike systems such as 
PostgreSQL, Doris only indexes the first 36 bytes of key columns and stops at 
the first VARCHAR. Columns beyond this prefix won't benefit from the sort key. 
Add [inverted indexes](../table-design/index/inverted-index) for those columns. 
See [Sort Key](#sort-key).
+
+Use [Query Profile](../admin-manual/open-api/fe-http/query-profile-action) to 
diagnose slow queries.
diff --git 
a/versioned_docs/version-4.x/gettingStarted/before-you-start-the-poc.md 
b/versioned_docs/version-4.x/gettingStarted/before-you-start-the-poc.md
new file mode 100644
index 00000000000..c507a505517
--- /dev/null
+++ b/versioned_docs/version-4.x/gettingStarted/before-you-start-the-poc.md
@@ -0,0 +1,115 @@
+---
+{
+    "title": "Before You Start the POC",
+    "language": "en",
+    "description": "Common issues new users encounter with table design, data 
loading, and query tuning in Apache Doris.",
+    "sidebar_label": "Before You Start the POC"
+}
+---
+
+# Before You Start the POC
+
+This document highlights common issues that new users may encounter, with the 
goal of accelerating the POC process.
+
+## Table Design
+
+Creating a table in Doris involves four decisions that affect load and query 
performance.
+
+### Data Model
+
+| If your data is... | Use | Why |
+|---|---|---|
+| Append-only (logs, events, facts) | **Duplicate Key** (default) | Keeps all 
rows. Best query performance. |
+| Updated by primary key (CDC, upsert) | **Unique Key** | New rows replace old 
rows with the same key. |
+| Pre-aggregated metrics (PV, UV, sums) | **Aggregate Key** | Rows are merged 
with SUM/MAX/MIN at write time. |
+
+**Duplicate Key works for most scenarios.** See [Data Model 
Overview](../table-design/data-model/overview).
+
+### Sort Key
+
+Put the column you filter on most frequently first, with fixed-size types 
(INT, BIGINT, DATE) before VARCHAR. Doris builds a [prefix 
index](../table-design/index/prefix-index) on the first 36 bytes of key columns 
but stops at the first VARCHAR. Add [inverted 
indexes](../table-design/index/inverted-index/overview) for other columns that 
need fast filtering.
+
+### Partitioning
+
+If you have a time column, use `AUTO PARTITION BY RANGE(date_trunc(time_col, 
'day'))` to enable [partition 
pruning](../table-design/data-partitioning/auto-partitioning). Doris skips 
irrelevant partitions automatically.
+
+### Bucketing
+
+Default is **Random bucketing** (recommended for Duplicate Key tables). Use 
`DISTRIBUTED BY HASH(col)` if you frequently filter or join on a specific 
column. See [Data Bucketing](../table-design/data-partitioning/data-bucketing).
+
+**How to choose bucket count:**
+
+1. **Multiple of BE count** to ensure even data distribution. When BEs are 
added later, queries typically scan multiple partitions, so performance holds 
up.
+2. **As low as possible** to avoid small files.
+3. **Compressed data per bucket ≤ 20 GB** (≤ 10 GB for Unique Key). Check with 
`SHOW TABLETS FROM your_table`.
+4. **No more than 128 per partition.** Consider partitioning first if you need 
more. In extreme cases the upper bound is 1024, but this is rarely needed in 
production.
+
+### Example Templates
+
+#### Log / Event Analytics
+
+```sql
+CREATE TABLE app_logs
+(
+    log_time      DATETIME    NOT NULL,
+    log_level     VARCHAR(10),
+    service_name  VARCHAR(50),
+    trace_id      VARCHAR(64),
+    message       STRING,
+    INDEX idx_message (message) USING INVERTED PROPERTIES("parser" = "unicode")
+)
+AUTO PARTITION BY RANGE(date_trunc(`log_time`, 'day'))
+()
+DISTRIBUTED BY RANDOM BUCKETS 10;
+```
+
+#### Real-Time Dashboard with Upsert (CDC)
+
+```sql
+CREATE TABLE user_profiles
+(
+    user_id       BIGINT      NOT NULL,
+    username      VARCHAR(50),
+    email         VARCHAR(100),
+    status        TINYINT,
+    updated_at    DATETIME
+)
+UNIQUE KEY(user_id)
+DISTRIBUTED BY HASH(user_id) BUCKETS 10;
+```
+
+#### Metrics Aggregation
+
+```sql
+CREATE TABLE site_metrics
+(
+    dt            DATE        NOT NULL,
+    site_id       INT         NOT NULL,
+    pv            BIGINT      SUM DEFAULT '0',
+    uv            BIGINT      MAX DEFAULT '0'
+)
+AGGREGATE KEY(dt, site_id)
+AUTO PARTITION BY RANGE(date_trunc(`dt`, 'day'))
+()
+DISTRIBUTED BY HASH(site_id) BUCKETS 10;
+```
+
+## Performance Pitfalls
+
+### Load
+
+- **Don't use `INSERT INTO VALUES` for bulk data.** Use [Stream 
Load](../data-operate/import/import-way/stream-load-manual) or [Broker 
Load](../data-operate/import/import-way/broker-load-manual) instead. See 
[Loading Overview](../data-operate/import/load-manual).
+- **Batch writes on the client side.** High-frequency small imports cause 
version accumulation. If not feasible, use [Group 
Commit](../data-operate/import/group-commit-manual).
+- **Break large imports into smaller batches.** A failed long-running import 
must restart from scratch. Use [INSERT INTO SELECT with S3 
TVF](../data-operate/import/streaming-job/streaming-job-tvf) for incremental 
import.
+- **Enable `load_to_single_tablet`** for Duplicate Key tables with Random 
bucketing to reduce write amplification.
+
+See [Load Best Practices](../data-operate/import/load-best-practices).
+
+### Query
+
+- **Avoid data skew.** Check tablet sizes with `SHOW TABLETS`. Switch to 
Random bucketing or a higher-cardinality bucket column if sizes vary 
significantly.
+- **Don't over-bucket.** Too many small tablets create scheduling overhead and 
can degrade query performance by up to 50%. See [Bucketing](#bucketing) for 
sizing guidelines.
+- **Don't under-bucket.** Too few tablets limit CPU parallelism. See 
[Bucketing](#bucketing) for sizing guidelines.
+- **Put the right columns in the sort key.** Unlike systems such as 
PostgreSQL, Doris only indexes the first 36 bytes of key columns and stops at 
the first VARCHAR. Columns beyond this prefix won't benefit from the sort key. 
Add [inverted indexes](../table-design/index/inverted-index/overview) for those 
columns. See [Sort Key](#sort-key).
+
+See [Query Profile](../query-acceleration/query-profile) to diagnose slow 
queries.
diff --git a/versioned_sidebars/version-3.x-sidebars.json 
b/versioned_sidebars/version-3.x-sidebars.json
index 12bd9268eed..d95c28292c3 100644
--- a/versioned_sidebars/version-3.x-sidebars.json
+++ b/versioned_sidebars/version-3.x-sidebars.json
@@ -7,6 +7,7 @@
             "items": [
                 "gettingStarted/what-is-apache-doris",
                 "gettingStarted/quick-start",
+                "gettingStarted/before-you-start-the-poc",
                 {
                     "type": "category",
                     "label": "Tech Alternatives",
diff --git a/versioned_sidebars/version-4.x-sidebars.json 
b/versioned_sidebars/version-4.x-sidebars.json
index cb4bd320d6c..9196edfb39b 100644
--- a/versioned_sidebars/version-4.x-sidebars.json
+++ b/versioned_sidebars/version-4.x-sidebars.json
@@ -7,6 +7,7 @@
             "items": [
                 "gettingStarted/what-is-apache-doris",
                 "gettingStarted/quick-start",
+                "gettingStarted/before-you-start-the-poc",
                 {
                     "type": "category",
                     "label": "Tech Alternatives",


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to