データ基盤

Trinoとは|SQLが書けても、1件ずつ引く用途では往復が1001回になった

1件ずつ引くとどうなるのかまとめて読むと何が効くのか普通のデータベースと何が違うのか

1000件の一覧を1件ずつ引くと、往復が1001回になり、まとめて引く場合の223.0倍かかりました。

公式は汎用のリレーショナルデータベースではないと明言しています。用途を外すと、この差がそのまま出ます。

この記事の要点

  • 1件ずつだと223.0倍
  • 往復が速いと差は1.5倍
  • 1項目なら読む量は12.0倍差
  • 索引をたどれば137倍速い

1000件を1件ずつ引くと、往復が1001回になる

公式が汎用ではないと述べています。1件ずつ取り出す形に当てると、往復がそのまま効きます。

Trinoは、置き換えを狙った道具ではありません。公式はTrinoは汎用のリレーショナルデータベースではないと述べています。

では用途を外すと何が起きるのか。1件ずつ引く形で実際に数えて比べました。

一覧の件数を変える

text
1往復 0.8ms、1行を返す手間 0.002ms として計算する
一覧の件数を変えて、1件ずつ引く場合とまとめて引く場合を比べる

一覧の件数  1件ずつ(往復)  1件ずつ(時間)  まとめて(往復)  まとめて(時間)  比
10件                     11回            8.8ms                2回             1.6ms     5.4倍
50件                     51回           40.9ms                2回             1.7ms    24.1倍
200件                   201回          161.2ms                2回             2.0ms    80.6倍
1000件                 1001回          802.8ms                2回             3.6ms   223.0倍

1000件では往復が1001回になり、223.0倍の差がつきました。返す行の数は同じです。

差はすべて往復の回数から来ています。まとめて引けば、件数が増えても2回のままです。

距離が効いている

text
一覧200件で固定し、1往復にかかる時間のほうを変える

1往復      1件ずつ(時間)  まとめて(時間)  比
0.001ms              0.60ms            0.40ms    1.5倍
0.01ms               2.41ms            0.42ms    5.7倍
0.1ms               20.50ms            0.60ms   34.2倍
0.8ms              161.20ms            2.00ms   80.6倍
5ms               1005.40ms           10.40ms   96.7倍

往復が0.001msなら、差は1.5倍まで縮みます。同じ機械の中にある場合がこれにあたります。

Trinoは離れた置き場に問い合わせる形をとります。だから往復の重さがそのまま効きます

件数が増えるほど、1件ずつの形は不利になる。

単位: 倍1000件223倍200件80.6倍50件24.1倍10件5.4倍1往復0.8msでの実測。往復が0.001msまで下がれば、200件での比は1.5倍まで縮む。
図1 ── 一覧の件数と、まとめて引く場合との比
出典Trino 公式ドキュメント「Trino use cases」2026-08-18 確認
Trino is not a general-purpose relational database.
原文Trino 公式ドキュメント「Trino use cases」 この内容の有効期限2027-02-18

使う項目が1個なら読む量は12分の1

集約のために作られています。効くのは使う項目を絞ることで、全項目を選ぶと利点が消えます。

Trinoは、集約のために作られています。公式はデータウェアハウジングと分析、すなわちデータの分析、大量のデータの集約、報告の作成を扱うために設計されたと述べています。

集約で効くのは、読む量を絞ることです。どれだけ変わるのか実際に読んで数えました。

使う項目の数を変える

text
表 200,000行・1行あたり 12項目(1項目 4バイト)
集計に使う項目の数を変えて、読む量を見る

使う項目  行ごとに持つ形  列ごとに持つ形  比
1個                   9.2MB           0.8MB   12.0倍
2個                   9.2MB           1.5MB    6.0倍
3個                   9.2MB           2.3MB    4.0倍
6個                   9.2MB           4.6MB    2.0倍
12個                  9.2MB           9.2MB    1.0倍

1項目だけを合計する時間(同じ値になることを確認済み)
  行ごとに持つ形  2.37ms
  列ごとに持つ形  0.33ms(7.1倍速い)

1項目だけなら読む量は12分の1です。12項目すべてを使えば同じになります。

時間の差は7.1倍で、量の比の12.0倍より小さくなりました。この規模だと、間の項目もまとめて手元に載るためです。

書き方で決まる

つまり効き方は、置き場の形と問い合わせの書き方の組み合わせで決まります。全項目を選ぶ書き方は利点を打ち消します。

手元に載りきらない規模になると、量の比がそのまま時間に出ます。大きくなるほど、絞る効果が強くなります

列ごとに持つ形そのものの効き方はParquetの記事で扱っていて、Trinoが読みに行く先もこの形が多くなります。

出典Trino 公式ドキュメント「Trino use cases」2026-08-18 確認
Trino was designed to handle data warehousing and analytics: data analysis, aggregating large amounts of data and producing reports.
原文Trino 公式ドキュメント「Trino use cases」 この内容の有効期限2027-02-18

同じ問い合わせでも、索引があれば137倍速い

SQLが同じでも、後ろの仕組みが違います。索引をたどる形はもともと別の道具の役目です。

TrinoはSQLを理解しますが、それだけです。公式はTrinoがSQLを理解するという事実を、標準的なデータベースの機能を備えていることと取り違えてはならないと述べています。

違いが出るのは、1人ぶんを引くような問い合わせです。実際に両方を動かして比べました。

全部見る場合とたどる場合

text
注文の表 200,000行・顧客 20,000人
ある顧客の注文をすべて取り出す問い合わせを 2000回

やり方          1回あたり見に行った行  合計の時間  1回あたりの時間
全部の行を見る                      200000.0行       257ms         0.129ms
索引をたどる                           10.0行         2ms         0.001ms

見に行った行は19,951倍、時間は137倍の差でした。SQLの見た目は同じです。

この索引をたどる形は、取引を扱う道具の得意分野です。公式も、そのための設計ではないと述べています。

混ぜたときに起きること

報告を作る問い合わせと、画面から1件を引く問い合わせを同じ場所に投げると、後者だけが極端に遅くなります

だから分けることになります。1件ずつの取り出しはPostgreSQLの記事で扱った形の道具に任せ、集約をTrinoに寄せます。

余談 この計測での注意

3つの計測はいずれも手元で書いた模型で、実際のTrinoを動かしたものではありません。往復0.8msや1行0.002msは置いた値です。索引の比較も、索引を作る手間と行を足すたびに直す手間を含めていません。列ごとに持つ形の時間はこの規模での実測で、規模が変われば比も変わります。ここで見せているのは、SQLが同じでも往復の回数と読む量で結果が桁違いに変わるという点と、用途を外すとその差がそのまま出るという点の2つです。

出典Trino 公式ドキュメント「Trino use cases」2026-08-18 確認
Do not mistake the fact that Trino understands SQL with it providing the features of a standard database.
原文Trino 公式ドキュメント「Trino use cases」 この内容の有効期限2027-02-18

よくある質問

TrinoはSQLが書けるデータベースですか
SQLは理解しますが、標準的なデータベースの機能を備えているわけではないと述べられています。
Trinoは何のために作られましたか
データウェアハウジングと分析のためです。大量のデータを集約し、報告を作る用途と説明されています。
1件ずつ引くとどれくらい遅いですか
1000件の一覧で往復が1001回になり、まとめて引く場合の223.0倍かかりました。
取引の処理には使えますか
向きません。オンラインでの取引処理を扱うようには設計されていないと述べられています。

まとめ

  • SQLは書けるが役目が違う
  • 1件ずつは往復が効く
  • まとめて読むと差が消える
  • 分析の形に寄せて使う

今日から始められること

  1. 1件ずつ引いている箇所を探す
  2. まとめて引く形に直せるか見る
  3. 取引の処理を混ぜていないか確かめる
  4. 使う項目の数を数える

実務で組んだTrinoのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る