銀河鉄道

SQLを書くコツ|集合は一斉に変化することを理解する

サムネイル
一斉変化がSQLを書くコツ
Everything meaningful
comes in sets.

意味あるものは
セットでやってくる?

一斉に変化する
ってことよ

Sets change all at once|集合は一斉に変化する


all the rows of the result set are created at the same time.
すべての行の結果は、同時に発生する

SQL for Smarties: Advanced SQL Programming

同時?

一括操作ってことなの

SQLは「一括操作」|all at once

  • Sets of data are manipulated as complete units of work
    • 作業単位で処理をする
  • not row-by-row processing.
    • 一行一行ではない

なぜ一括で操作できるの?

実は、本当の意味での
一括操作は無理なのよ

順次実行の果てに、結果を一括で出す

エンジンはひとつひとつ
操作してる

終了のホイッスルで一斉変化
  • エンジンは、ひとつひとつ処理をする
  • 結果が出たら
  • 一斉に変化させる

人間の視点からは
一括に見えてる

だから、考え方を変えないと
SQLが書けないの

SQLを書くコツ|The key to make SQL databases perform well

Rethink|そもそもから考え直す

SQL文を書くには
  • to take a break from the keyboard
    • まず、キーボードから離れること
  • rethink the way of approaching the problem
    • そもそもの考えを見直す必要がある
  • rethink in terms of a set-based declarative approach
    • 集合ベースの宣言型アプローチで考え直す必要がある

キーボードから離れるの?

いきなりパソコン画面に向かうと
ひとつひとつ書きがちだから

パソコンを離れ、全体をイメージする

紙で書いたほうがいい場合も
  • 複雑なSQLをコーディングする前に
  • 全体像を紙に書いてみる

全体像?

「どうやろう?」を捨てるの

実装を急ぐな、設計を見直せ

  • まず自分の考えを捨てる
    • あれやって、これやって…は手続き →NG!
    • ループやifのチカラ技を捨てる
    • ひとつずつの処理を考えない
  • 新しい考えを取り入れる
    • 「何をしたいか」に切り替える
    • 「全体の集合に対して何をすべきか」に変える
    • 個別の行ではなく、集合全体を対象にする

補足)rethink と reconsider の違い

単語ニュアンス
rethinkゼロベースで根本的に考え直す
reconsider一度考えたことを再検討する

「そもそも」から考え直し?

ゴールを宣言するの

ゴールの宣言から始める

Think in sets. Declare the goal.
  • Don’t think row by row. Think in sets.
    • 一行ずつ考えるな、集合で考えよ
  • Don’t trace the flow—declare the goal.
    • 過程を忘れ、ゴールを宣言せよ

どうしよう?は忘れていい
ゴールだけ宣言すればいい

SQLは
お願いする言語だから

まずはゴールを
考えよう
あとはやってくれる

参考文献

  • Joe Celko’s SQL for Smarties: Advanced SQL Programming 
  • 達人に学ぶ SQL徹底指南書(ミック)
  • 達人に学ぶDB設計徹底指南書(ミック)

To be continued…

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。