SQL実践入門──高速でわかりやすいクエリの書き方
はじめに
本書の目的は,パフォーマンスの良いSQLの書き方,特に大量データを処理するSQLの性能向上の方法を理解することです。SQLの第一の目的は,ユーザが欲しいと思ったデータを選択すること,あるいは望んだ結果になるようデータを更新することです。通常のプログラミング言語と同様,一つの目的を実現するSQLの書き方は複数あり,それらの間には機能的には差異はなくても,パフォーマンスには大きな差が生じることが頻繁に起こります。したがって,SQLの組み立てを行うにあたっても,効率やパフォーマンスを重視した書き方が求められることが多くあります。
アプリケーション開発者の方の中には,普段あまりDBMSの内部アーキテクチャやストレージといった下位層を意識せず,データベースをブラックボックスとして扱っている人も多いでしょう。実際,データベースの扱うデータ量が少なければ,そのスタンスでも十分実用に堪えるシステムが作れるのが,RDB(リレーショナルデータベース)とSQLの良いところであり,「ブラックボックスとして扱えるデータベース」は,RDBが目指してきた目標の一つとすら言ってよいぐらいです。
しかし近年は,データベースが扱うデータ量は飛躍的な増大を遂げており,「ビッグデータ」という言葉も,IT業界の枠を超え社会全般に広まりました。それと歩調を合わせて,データベースのパフォーマンスに対する要求も高くなる一方です。
データベースのパフォーマンスについて理解するには,SQLだけでなく,データベース内部のアーキテクチャやストレージのようなハードウェアの特性まで含めた総合的な知識が必要となります。あるSQLがなぜ速く,それと同じ結果を得る別のSQLがなぜ遅いのかを理解するには,ブラックボックスの蓋を開けて中を覗いてみることが必要となります。本書は,その中を実行計画を通して覗いてみることで,ブラックボックスをホワイトボックスにすることが目的です。
振り返ってみると,RDBとSQLは,ユーザが直観的に利用できるインタフェースと,大量データの効率的な処理という,2つの相反する命題の間で常に揺れ続けてきたミドルウェアでした。RDBとSQLが,この難問をどのように解決しようと努力してきたか,その成果はどのようなものか──そして今,どのような壁に突き当たっているか──それらを一つ一つ,本書の中で明らかにしていきます。
本書もまた,この難問に対する最終解決を与えるものではありません。しかし,現場で日々データベースのパフォーマンスと戦うエンジニアに,RDBとSQLをブラックボックスとして扱っていたときよりも一歩進んだアプローチを示すことができればと考えています。
謝辞
本書の執筆にあたり,木村明治氏および有限会社アートライの坂井恵氏にレビューしていただき有益な指摘を多く与えてもらいました。この場を借りて感謝いたします。
サンプルコードのダウンロード
本書で利用しているサンプルコードはWebで公開しています。詳細は本書サポートページを参照してください。補足情報や正誤情報なども掲載しています。