> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Создание таблиц в ClickHouse

> Узнайте о создании таблиц в ClickHouse

Как и в большинстве систем управления базами данных, в ClickHouse таблицы логически объединяются в **базы данных**. Чтобы создать новую базу данных в ClickHouse, используйте команду `CREATE DATABASE`:

```sql theme={null}
CREATE DATABASE IF NOT EXISTS helloworld
```

Аналогично, используйте `CREATE TABLE`, чтобы создать новую таблицу. Если вы не укажете имя базы данных, таблица будет находиться в
базе данных `default`.

Следующая таблица с именем `my_first_table` создается в базе данных `helloworld`:

```sql theme={null}
  CREATE TABLE helloworld.my_first_table
  (
      user_id UInt32,
      message String,
      timestamp DateTime,
      metric Float32
  )
  ENGINE = MergeTree()
  PRIMARY KEY (user_id, timestamp)
```

В приведённом выше примере `my_first_table` — это таблица `MergeTree` с четырьмя столбцами:

* `user_id`:  32-битное целое число без знака
* `message`: тип данных `String`, который используется вместо типов `VARCHAR`, `BLOB`, `CLOB` и других в иных системах баз данных
* `timestamp`: значение `DateTime`, представляющее момент времени
* `metric`: 32-битное число с плавающей точкой

<Note>
  Движок таблицы определяет:

  * Как и где хранятся данные
  * Какие запросы поддерживаются
  * Реплицируются ли данные

  Доступно множество движков, но для простой таблицы на одноузловом сервере ClickHouse вашим наиболее вероятным выбором будет [MergeTree](/ru/reference/engines/table-engines/mergetree-family/mergetree).
</Note>

<div id="a-brief-intro-to-primary-keys">
  ## Краткое введение в первичные ключи
</div>

Прежде чем двигаться дальше, важно понять, как работают первичные ключи в ClickHouse (их реализация
может показаться неожиданной!):

* в ClickHouse первичные ключи ***не уникальны*** для каждой строки таблицы

Первичный ключ таблицы ClickHouse определяет, как данные сортируются при записи на диск. Каждые 8 192 строки или 10 МБ
данных (это называется **гранулярностью индекса**) создают запись в файле индекса первичного ключа. Благодаря этой
гранулярности создаётся **разреженный индекс**, который легко помещается в памяти, а гранулы представляют собой
минимальный фрагмент данных столбца, обрабатываемый при выполнении запросов `SELECT`.

Первичный ключ можно задать с помощью параметра `PRIMARY KEY`. Если вы создаёте таблицу без указания `PRIMARY KEY`,
то ключом становится кортеж, заданный в выражении `ORDER BY`. Если указаны и `PRIMARY KEY`, и `ORDER BY`, то первичный ключ должен быть префиксом порядка сортировки.

Первичный ключ также является ключом сортировки, то есть кортежем `(user_id, timestamp)`. Поэтому данные, хранящиеся в каждом
файле столбца, будут отсортированы сначала по `user_id`, а затем по `timestamp`.

<Tip>
  Подробнее см. в [учебном модуле Modeling Data](https://learn.clickhouse.com/visitor_catalog_class/show/1328860/?utm_source=clickhouse\&utm_medium=docs) в ClickHouse Academy.
</Tip>
