【入門編】 TIDスキャン – PostgreSQL

こんにちは!データベースの世界へようこそ。

普段、PostgreSQLを触っていると「SQLを書いてデータを検索する」というのが当たり前の風景ですよね。でも、もし「このデータの場所(住所)を直接知っていたら、もっと早くたどり着けるんじゃない?」と考えたことはありませんか?

今日は、そんな「裏技」みたいな検索方法、TIDスキャンについてお話しします。難しそうに聞こえるかもしれませんが、実はとってもシンプルな仕組みなんですよ。

—

本棚に例えて考えてみよう

想像してみてください。あなたは巨大な図書館の司書さんです。
お客さんから「『銀河鉄道の夜』を貸して」と言われたら、どうしますか?

通常なら、カタログ(インデックス)を引いて、著者名やタイトルから本の場所を探しますよね。これがデータベースでいう「インデックススキャン」です。

でも、もしあなたが「その本は、第3書庫の、上から5段目の、左から2番目にあるよ」という正確な「座標」をすでに知っていたらどうでしょう?

カタログを引く手間なんてゼロですよね。そのまま一直線にその場所へ向かって、サッと本を抜き取るはずです。

この「座標を直接指定して取りに行く」というのが、TIDスキャンの正体なんです。

—

TID(Tuple Identifier)って何?

専門的な話を少しだけ噛み砕くと、TIDというのは「物理的な住所」のことです。
PostgreSQLの中では、すべてのデータ(タプル)に対して「どのページの、何番目の位置にあるか」というIDが割り振られています。

  • ページ番号:本棚のどの「階」にあるか
  • タプルインデックス:その階のどの「場所」にあるか

この2つを組み合わせたものがTIDです。データベース内部の住所録のようなものですね。

—

TIDスキャンが最強な理由

TIDスキャンは、PostgreSQLが使える検索手法の中で「最速」と言っても過言ではありません。

だって、考えてもみてください。
インデックスを辿る必要もなければ、テーブル全体をなめる必要(フルスキャン)もありません。「ここにある!」と分かっている場所に直接手を伸ばすだけですから、無駄な動きが一切ないんです。

でも、普段はあまり使わないよね?

そうなんです。ここが面白いところで、実はTIDスキャンは、人間が直接SQLで指定して使う機会はそう多くありません。

なぜなら、データベースというのは本来「名前」や「ID」など、人間にとって意味のある情報でデータを検索したいものだからです。「物理的な住所」なんて、データが更新されたり整理(バキューム処理)されたりすると、コロコロ変わってしまうこともありますよね。

「昨日までそこにあった本が、今日は別の場所に移動している」……そんな図書館では、住所を覚えておくのは大変です。

—

どんなときに活躍するの?

じゃあ、この機能は無駄なのかというと、全くそんなことはありません。むしろPostgreSQLの縁の下の力持ちなんです。

例えば、「一度検索したデータの詳細を、もう一度素早く見たい」といった内部的な処理や、特定のツールがデータの場所を特定して修正を行う際など、システムが裏側で「ここだよ!」とピンポイントで指定する時に、TIDスキャンは最高のパフォーマンスを発揮してくれます。

—

まとめ:仕組みを知ると、データベースはもっと面白くなる

TIDスキャンについて、少しイメージが湧きましたでしょうか?

1. TIDはデータの「正確な住所」
2. インデックスすら使わない「最短ルート」の検索
3. 普段は裏方だけど、ここぞという時に爆速で仕事をしてくれる

データベースの世界は、一見すると無機質な数字の羅列ですが、中身を知ると「こうやって効率よく動いているんだ!」という職人芸のような工夫がたくさん隠されています。

もし次に、ものすごく重いクエリに悩まされたら、「あ、このデータ、物理的な場所まで一直線にいけたらどんなに楽だろうな」なんて、TIDスキャンのことを思い出してみてください。きっと、データベースを見る目が少し変わるはずですよ。

それでは、また次回の記事でお会いしましょう!Happy Querying!

コメント

タイトルとURLをコピーしました