SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

イベントレポート(AD)

達人のワザを、達人に学ぼう~「達人に学ぶハイパフォーマンスSQL実践講座」体験レポート

  • X ポスト
  • このエントリーをはてなブックマークに追加

午後の部:SQLの効率的な書き方

 データベースの性能問題を解決するために「実行計画」を知り、それを用いてどのようにクエリを改善できるのか、を考えていく必要があります。実行計画とは、RDBMSが与えられたクエリをどのように実行するか立てる計画で、通常複数の計画が立てられるものです。そのうち、RDBMS側がオプティマイザでどの実行計画がよいかを決定するのですが、RDBMSによってはオプティマイザにヒントを与えて、どの実行計画を利用するかを調整できる場合もあります。

 まずは実行計画をどのように見るか、というところがファーストステップとなります。

実行計画とその見方

 Oracle DBについて、SQL*Plusから以下のように設定すると、実行計画と共に実際にSQLを実行し、それにかかった時間が測定できます。

set autot traceonly
set timing on
set time on

 本番環境では気軽に重いクエリの実行はできないので、set autot traceonlyの後にexpをつけて、SQLを実行しない(いわゆるdry run)も可能です。しかし、ここでは一人一台の実行環境がありますし、すでに実行計画表示用のデータをもったテーブルもありますので、気にせず行いましょう。そして実行計画の見方とかかる時間を確認したら、結合(Join)について、実際にどのように改善できるかどうかトライしてみます。

結合のアルゴリズムと実行計画

 結合(Join)には主な結合アルゴリズムとしてNL(NESTED LOOP)、HASH、SORT MERGEがありますが、今回はNLとHASHについて、その結合アルゴリズム自体の説明と、そのアルゴリズムだからこそ「こうすればはやくなる・遅くなる」の説明が演習とともに示されます。ここでも実際にデータが用意されている、ということが役立ち、例えば前提条件をこう変えると、どのアルゴリズムが利用され、どちらがはやいか、というのを、単なる机上の問いと説明、答えに終わらず、実際に実行して確認や答え合わせができる、というのが、達成感があってよかったです。

最後に

 ミックさんの初心者向けの書籍は、本だけでも非常に分かりやすく役立つものですが、やはり本人と対面で、実際のデータ操作をしながら勉強し、不明点を本人に確認できる場、というのは(受講料がやや高価ですが)なにものにも替えがたい経験でした。

 私の場合、本を読んだときにはCASE式には納得がいっていましたが、Window関数については「へぇ~」って感じで読み飛ばしていたものが、今回の受講でかなり納得して、これが使える商用版の新しめのバージョンや、PostgreSQLなどでは積極的に使ってみようという気になりました(注2)。

 また、便利な手段(CASE式やWindow関数)が無かった時代にはどのような(効率の悪い)クエリで処理を行っていたか、ということも、演習の箸休め的にコラムで触れられていたのも、面白かったです。

 SQLの上っ面だけではなく、その仕組みも理解して、一皮むけたDBエンジニアへの足がかりに、本講座を受講してみてはいかがでしょうか?

注2

 PostgreSQL以外のオープンソースRDBMSでも、Firebirdの最新バージョン3.0や、MySQLからフォークしたMariaDBの次期バージョン10.2からはWindow関数が使えるようになっています。

次回開催(2016/8/30)のお知らせ

 次回は、『達人に学ぶ ビッグデータ時代の最新SQLテクニック講座』と題したセミナーを8月30日(火)に開催します。SQLのテクニック紹介をさらに充実し、大規模データの高速処理に役立つノウハウを紹介します。ご期待ください!

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
イベントレポート連載記事一覧

もっと読む

この記事の著者

小川 範夫(オガワノリオ)

ネットワーク型やカード型のデータベースの時代から、データベース界隈を興味の赴くままウン十年さまようデータベースマニア(ミーハー)。ミックさんの本を読んではDB・SQLに思いを馳せ、西内さんの本を読んでは統計学・R言語をやろうと思うものの、日々ビールを飲んで眠ってしまい、積ん読本ばかりが増える日々。基...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9377 2016/06/23 14:35

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング