> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> TinyLog 表引擎文档

# TinyLog 表引擎

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            ClickHouse Cloud 不支持此功能
        </div>;
};

<CloudNotSupportedBadge />

该引擎属于日志引擎家族。有关日志引擎的通用属性及其差异，请参见 [Log Engine Family](/docs/zh/reference/engines/table-engines/log-family/index)。

该表引擎通常采用一次写入的方式：数据写入一次，然后根据需要多次读取。例如，可以将 `TinyLog` 类型的表用于按小批次处理的中间数据。请注意，将数据存储在大量小表中效率较低。

查询在单个 stream 中执行。换句话说，该引擎适用于相对较小的表 (最多约 1,000,000 行) 。如果你有许多小表，使用这种表引擎是合理的，因为它比 [Log](/docs/zh/reference/engines/table-engines/log-family/log) 引擎更简单 (需要打开的文件更少) 。

<div id="characteristics">
  ## 特性
</div>

* **结构更简单**：与 Log 引擎不同，TinyLog 不使用标记文件。这降低了复杂性，但也限制了其针对大型数据集的性能优化能力。
* **单 stream 查询**：对 TinyLog 表的查询会在单个 stream 中执行，因此它适用于相对较小的表，通常最多可达 1,000,000 行。
* **小表场景下效率更高**：TinyLog 引擎结构简单，因此在管理大量小表时更具优势，因为与 Log 引擎相比，它需要更少的文件操作。

与 Log 引擎不同，TinyLog 不使用标记文件。这降低了复杂性，但也限制了其针对更大数据集的性能优化能力。

<div id="table_engines-tinylog-creating-a-table">
  ## 创建表
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = TinyLog
```

请参阅 [CREATE TABLE](/docs/zh/reference/statements/create/table) 查询的详细说明。

<div id="table_engines-tinylog-writing-the-data">
  ## 写入数据
</div>

`TinyLog` 引擎将所有列存储在一个文件中。对于每个 `INSERT` 查询，ClickHouse 都会将数据块追加到表文件末尾，并按列依次写入。

对于每个表，ClickHouse 会写入以下文件：

* `<column>.bin`：每列对应一个数据文件，其中包含序列化并压缩后的数据。

`TinyLog` 引擎不支持 `ALTER UPDATE` 和 `ALTER DELETE` 操作。

<div id="table_engines-tinylog-example-of-use">
  ## 使用示例
</div>

创建表：

```sql theme={null}
CREATE TABLE tiny_log_table
(
    timestamp DateTime,
    message_type String,
    message String
)
ENGINE = TinyLog
```

插入数据：

```sql theme={null}
INSERT INTO tiny_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO tiny_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')
```

我们使用了两个 `INSERT` 查询，在 `<column>.bin` 文件中创建了两个数据块。

ClickHouse 使用单个 stream 读取数据。因此，输出中各数据块的顺序与它们在输入中的顺序一致。例如：

```sql theme={null}
SELECT * FROM tiny_log_table
```

```text theme={null}
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2024-12-10 13:11:58 │ REGULAR      │ The first regular message  │
│ 2024-12-10 13:12:12 │ REGULAR      │ The second regular message │
│ 2024-12-10 13:12:12 │ WARNING      │ The first warning message  │
└─────────────────────┴──────────────┴────────────────────────────┘
```
