こんにちは!データベースエンジニアとして日々PostgreSQLと格闘している私ですが、今日は少し肩の力を抜いて、「シーケンシャルスキャン」という言葉についてお話ししようと思います。
データベースの世界って、最初のうちは専門用語のオンパレードで「うっ……」と身構えてしまいますよね。でも大丈夫。この「シーケンシャルスキャン」も、実は私たちの日常に隠れている、とってもシンプルな動作のことなんですよ。
—
そもそも「シーケンシャルスキャン」って何?
直訳すると「順番に見ていく」ということ。
専門的に言うと「テーブルの先頭から末尾まで、データを一つひとつ確認していくアクセス方法」のことです。
これ、「本棚の端から端まで、一冊ずつタイトルを確認していく作業」にそっくりだと思いませんか?
例えば、あなたが100冊の本が並んだ本棚から『特定の1冊』を探しているとします。
もしその本がどこにあるか全く見当がつかないなら、左端から順に背表紙を指でなぞって確認していきますよね。これがまさにシーケンシャルスキャンです。
なぜこれが「選ばれる」のか?
データベースエンジニアとしては「なるべくシーケンシャルスキャンを避けろ!」なんて言われることも多いのですが、実はこれ、決して「悪い子」ではないんです。
1. 小さなテーブルなら、これが一番速い!
もし本棚に3冊しか本がなかったら、目次や索引を作るよりも、端からパッと見たほうが圧倒的に速いですよね。データベースも同じで、データ量が少ないときは、あれこれ準備するより最初から全部読んじゃったほうが効率的なんです。
2. 「全部」が必要なとき
「売上の合計金額を出して!」とか「全ユーザーの平均年齢を知りたい!」といったリクエストが来たら、データの一部だけを見ていても答えは出せませんよね。そんなときは、腹をくくって全部のデータを順番にチェックするしかありません。
逆に、どんな時に「困ったこと」になるの?
本棚が1万冊あったらどうでしょう?
そんな中で「『データベース入門』を探して!」と言われて、端から順番に1冊ずつ見ていたら、日が暮れてしまいますよね。
データベースの世界でも同じです。データが膨大な数あるときに、この「端から順番に見る」というやり方を続けていると、検索が遅すぎてアプリの動作が重くなってしまいます。これが、エンジニアが「チューニング」で頭を悩ませるポイントなんです。
—
まとめ:怖がらずに「今の状況」を想像してみて
シーケンシャルスキャンは、決して悪者ではありません。ただ、「適材適所」なだけなんです。
- データが少ないときは、頼れる相棒。
- データが膨大なときは、ちょっとやりすぎな頑張り屋さん。
皆さんがPostgreSQLを触っていて「あれ、なんか遅いな?」と感じたら、ぜひ一度「このデータ量に対して、端から全部見るのは効率が悪すぎないかな?」と想像してみてください。
そうやってデータベースの動きを自分の頭の中でイメージできるようになると、SQLを書くのがもっと楽しくなってきますよ!
これからも一緒に、データベースの面白い世界を深掘りしていきましょうね。それでは、また!
コメント