5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データベース基礎:行ベース(行指向)と列ベース(列指向 / カラム型)の違いを整理する

Last updated at Posted at 2025-12-29

データベースの話で出てくる「行ベース(行指向)」と「列ベース(列指向)」。

言葉は知っていても、
はっきり説明できるかと言われると迷うことはないでしょうか。

  • 何がどう違うのか
  • なぜ「分析は列ベースが速い」と言われるのか
  • どう使い分ければよいのか

この記事では、
データを物理的にどのような順序で保存しているか という観点から、
行ベースと列ベースの違いと使い分けを整理します。

1. そもそも何が違うのか?(物理的な並び順)

データベースを「エクセルの表」だと想像してください。
コンピュータのメモリやディスクは、「1列に並んだ長いテープ」 のような構造をしています。データベースはこのテープの上に、テーブルのデータを 順番に詰めて保存 しています。

このテープに、データをどの順序で詰めるか(行ごとか、列ごとか) によって、得意な処理が変わってきます。

行ベース(Row-Oriented)

1行分のデータをひとかたまりとして保存します。

[ID1, 名前1, 年齢1], [ID2, 名前2, 年齢2], [ID3, 名前3, 年齢3] ...

👉 「1人分の情報」が常にセットで並ぶ。

列ベース(Column-Oriented / Columnar)

同じ属性(カラム)のデータをひとかたまりとして保存します。

[ID1, ID2, ID3...], [名前1, 名前2, 名前3...], [年齢1, 年齢2, 年齢3...]

👉 「年齢だけ」「名前だけ」が横一列に並ぶ。

image.png

2. 行ベース vs 列ベース 比較表

観点 行ベース(行指向) 列ベース(列指向)
例えるなら 「1人分のカルテ」をすぐ出せる受付 「全員分の年齢」を一瞬で集計する統計家
データの保存単位 行(1件のレコードをまとめて保存) 列(同じ項目のデータをまとめて保存)
得意な処理 データの追加・更新・削除 大量データの集計・分析
読み取り性能 SELECT * のような
1件まるごと取得が速い
SUM / AVG など
特定カラムの集計が非常に速い
書き込み性能 1行ずつの追加・更新が得意 1行追加は苦手
(まとめて書くのは得意)
圧縮効率 低め(異なる種類のデータが混ざる) 非常に高い(似たデータが並ぶ)
主な用途 OLTP(業務システム) OLAP(分析・レポート)
代表的な用途例 ユーザー管理、注文管理、Webアプリ 売上集計、ログ分析、BI

OLTP / OLAP とは?

■ OLTP(Online Transaction Processing)
→ 日々の業務処理向け
→ データの 追加・更新・削除 を高速・正確に行う
例:注文登録、ユーザー情報更新

■ OLAP(Online Analytical Processing)
→ 分析・集計向け
→ 大量データをまとめて 集計・分析 する
例:売上集計、ログ分析、レポート作成

OCIの自律型データベース(Autonomous AI Database)では、用途に合わせてワークロード・タイプを選択できます。

Autonomous AI Transaction Processing (ATP)
向き:行ベース(行指向)
特徴: 「1件も落とせない」「1秒間に何千件も書き込む」といった、ミッションクリティカルなトランザクション処理(OLTP)に最適化されています。

Autonomous AI Lakehouse (ALH)
向き:列ベース(列指向)
特徴: DB内のデータだけでなく、外部のオブジェクト・ストレージにある巨大なファイル(Apache Iceberg等)も列指向で高速スキャンします。複数の環境に散らばったデータをコピーせず、そのまま集計・分析するのに長けています。

※上記に加え、現時点ではJSONデータベース、APEXサービスをサポートしています。

3. なぜ列ベースは「集計」が速いのか?

例えば、「100万人のユーザーの中から平均年齢を出したい」 というクエリを投げたとします。

行ベースの場合: 「1人目のデータ全部(住所も趣味も)を読み、年齢だけ取り出す」→「2人目のデータ全部を読み…」という作業を100万回繰り返します。いらない情報(住所や趣味)までディスクから読み込むため、I/Oがムダになります。

列ベースの場合: 「年齢」のデータが固まっている場所をガバッと一気に読み込むだけです。他のカラム(名前や住所)には一切触れません。

👉 つまり、列ベースの場合、必要なカラムだけをピンポイントで読めるため、ディスクやメモリから読む量そのものが圧倒的に少なくなり、結果として集計処理が非常に高速になります。

4. 列ベースが速いもう一つの理由「高い圧縮効率」

列ベースが分析に強いもう一つの理由は、データの圧縮効率です。

例えば「国籍」というカラム。 行ベースだと、行ごとに「日本」「日本」「米国」...とバラバラに保存されますが、列ベースなら「日本」が10,000個続くような並びになります。 このように 同じ値が連続する ため、ZIP などの圧縮アルゴリズムと非常に相性が良くなります。

  • データサイズが小さくなる
  • ディスク I/O が減る
  • 結果として処理がさらに速くなる

という好循環が生まれます。

5. どう使い分けるのか

では、これらを踏まえてどう使い分ければよいのでしょうか。

迷わず「行ベース」を選ぶとき

  • ユーザーの新規登録や、プロフィールの更新が多い。
  • IDを指定して「その人の情報すべて」を引っ張ってくる処理がメイン。
  • 一般的なWebアプリケーションのバックエンド(OLTP)。

迷わず「列ベース」を選ぶとき

  • 数千万〜数億件のログを分析したい。
    -「先月の売上合計は?」「特定の商品の購入率は?」といった集計がメイン。
  • BIツール(TableauやLookerなど)のデータソースにする。

行ベースと列ベースは、どちらが優れているかではなく、「どんな処理をしたいか」によって選ぶものです。
ここまでの特性を踏まえて使い分けられれば、データベース設計でも、用途に合った選択ができるようになります。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?