> ## 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.

# 列指向データベースとは何ですか？

> 列指向データベースは、各カラムのデータを個別に格納します。これにより、任意のクエリで使用されるカラムについてのみ、ディスクからデータを読み取ることができます。

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

{frontMatter.description}

<div id="introduction">
  ## はじめに
</div>

列指向データベースは、各カラムのデータを個別に格納します。これにより、任意のクエリで使用されるカラムについてのみ、ディスクからデータを読み取ることができます。その一方で、行全体に影響する操作は、それに応じてコストが高くなります。列指向データベースは、カラム指向のデータベース管理システムとも呼ばれます。ClickHouse は、このようなシステムの代表的な例です。

<div id="advantages-of-a-columnar-database">
  ## 列指向データベースの利点
</div>

列指向データベースの主な利点は次のとおりです。

* 多数のカラムのうち、少数のカラムだけを使用するクエリに適している。
* 大量のデータに対する集約クエリに適している。
* カラム単位でデータを圧縮できる。

<div id="row-oriented-vs-column-oriented-databases">
  ## 行指向データベースとカラム指向データベースの比較
</div>

以下は、レポート作成時における従来の行指向システムとカラム指向データベースの違いを示した図です。

**従来の行指向**

<Image img="https://mintcdn.com/private-7c7dfe99/FToZ-03PB3UKnsk6/images/row-oriented.webp?fit=max&auto=format&n=FToZ-03PB3UKnsk6&q=85&s=a7e9d7fdbcc842c69494c7d4ec21ed4a" alt="従来の行指向データベースの格納方法を示す図" size="md" width="630" height="258" data-path="images/row-oriented.webp" />

**列指向**

<Image img="https://mintcdn.com/private-7c7dfe99/7KTNIE_ER4ouwRNt/images/column-oriented.webp?fit=max&auto=format&n=7KTNIE_ER4ouwRNt&q=85&s=0f8e7b2f4d28474b6dda42f388c5a350" alt="列指向データベースの格納方法を示す図" size="md" width="630" height="258" data-path="images/column-oriented.webp" />

列指向データベースは、分析アプリケーションに適した選択肢です。テーブルに必要になるかもしれない多数のカラムをあらかじめ持たせておいても、読み取りクエリの実行時に未使用のカラム分のコストを負担せずに済むためです (従来の OLTP データベースでは、データはカラム単位ではなく行単位で格納されるため、クエリ時にすべてのデータを読み取ります) 。カラム指向データベースはビッグデータ処理やデータウェアハウジング向けに設計されており、多くの場合、低コストなハードウェアで構成された分散クラスターを使ってネイティブにスケールし、スループットを向上させます。ClickHouse では、[distributed](/docs/ja/reference/engines/table-engines/special/distributed) テーブルと [replicated](/docs/ja/reference/engines/table-engines/mergetree-family/replication) テーブルを組み合わせることで、これを実現しています。
