著者で元同僚の@dblmktさんからいただきました。いただいてから少し時間が経ってしまった…。



SQLパフォーマンス詳解

購入する場合、電子版での購入になります。ちなみに、紙の本は夏以降に出るらしいです。

感想

翻訳本なのですが、読みやすく翻訳されています。初心者からエキスパートまで役に立つ内容です。特に駆け出しのエンジニアは持っておくといいと思います。自分も若い頃にこれを読んでいたらもっと上達が早かったんじゃないかと思いました。

where句とインデックスの説明

where句とインデックスの説明に大半を割かれています。やはりSQLの主役はselectとインデックスですね。

たとえばselect xxx from t where col1 = 1みたいなクエリがあるとして、多くの人はalter table t add index idx_col1(col1)などとしてインデックスを張ると思います。おそらくこのインデックスは効果があると思いますが、インデックスって何?どういう構造?までを理解している人は多くはない(と思う)。本書はインデックスとwhere句の説明に始まり、その後、よくありがちなトップN,  グルーピング, ソート, SQLでのページング, ジョイン, 更新系処理についての説明が続きます。


主要なミドルウェアを網羅した説明
RDBとして著名なOracle, PostgreSQL, MySQL, SQL Serverを中心に、それぞれのプロダクトによって挙動が異なる箇所について場合分けして説明してくれています。また付録として実行計画の見方がついているので、これから開発者として現場に投入される人や、MySQLは詳しいけどPostgresは触ったことないという人にとってうれしい内容になっています。


ORMとN+1問題について
C#, Java, Perl, PHP, Rubyなど、よく使われている言語からSQLを投げる場合の説明や、ORMを使った際に直面するN+1問題を著名なフレームワーク(Java(Hibernate), Perl(DBIx::class), PHP(Doctrine))を例にとって説明してくれています。ちょっとこのあたりの言語やFWのチョイスは俺の生きている環境と乖離があるw


インフラ周りについて
基本的にはSQLを中心に解説されていますが、昨今のハードウェア事情についても触れていました。
「応答時間とスループット」より引用

高価なハードウェアを使うようにしたからと言って、必ず処理が高速 になるとは限りません。しかし、通常はそれでたくさんの処理を行うこ とが可能になります。高価なハードウェアは、高速な車と言うより、広 い高速道路に例えるべきでしょう。つまり、それ自体によってスピード を出すことはできないし、それが許されていないかもしれません。しか し、多くの車線はあるのです。これが、ハードウェアに投資しても、必 ずしも遅いSQLクエリを速くすることにつながらない理由です。今や90年代ではありません。その頃、CPUコア1つの計算性能は急速 に向上していました。多くの応答時間の問題は、新しいハードウェアを 導入することで解消されました。CPUが高速になったからです。それは さながら毎年旧モデルの2倍高速な新しいモデルの車が発売されるよう なものでした。しかし、21世紀初めの数年間で、1CPUコアあたりの処 理能力は頭打ちになり、その点での改善はほとんど見られなくなりまし た。より高性能なCPUを発売し続けるため、各ベンダはマルチコア戦略 を取り始めました。しかしそれは、複数のタスクを同時に処理すること はできても、1つしかタスクがない時のパフォーマンスを上げることは できません。つまり、パフォーマンスを複数の側面から考える必要があ るようになったのです。水平方向のスケール(サーバの追加)にも、同じ制限があります。より 多くのサーバがあればよりたくさんのリクエストを処理できますが、 個々のクエリの応答時間は高速にはなりません。検索を高速にするに は、CouchDBやMongoDBといったリレーショナルでないシステムの場 合も含め、効率的な検索ツリーが必要になります。

最近では大容量メモリやフラッシュはコモディティ化してますし、高負荷なポイントに高価なハードウェアを投入するのは負荷対策の解の一つだと思います。コストが見合えばお金で解決してしまうのもビジネス的に正解な場合もあります。
これについての著者の主張としては、次の通り。
  • 正しいインデックスを張ることが高速化の近道。そのためにちゃんと実行計画を見るべき。
  • 用途に応じてNoSQLを使う
大掛かりな負荷試験で疲弊するよりは実行計画をちゃんと見よう、とも言っています。

最後に
今の職場でもMySQLを相変わらず運用していますし、この業界にいる以上は今後もなんらかのRDBMSとつきあっていくことになると思っています。SQLは息の長い技術要素ですし、しばらくは生き続けていくと思います。知識のアップデート/再確認ができて良かったです。まっつんありがとー!w
おわり

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Set your Twitter account name in your settings to use the TwitterBar Section.