SQLer 生島勘富 のブログ

RDB・SQLの話題を中心に情報発信をしています。

SQLと手続き型言語 - JOIN を手続き型で書いてみる

SQL手続き型言語オブジェクト指向言語)は最終的には同じです。

今回は、JOIN を手続き型言語Javaっぽく)書いてみます。

目次

  • 目次
  • オプティマイズについて
  • 2つの表をJOINしたSQL
    • 単純なネスティッドループ(NESTED LOOP)
    • インデックスを使ったネスティッドループ(NESTED LOOP)
    • ハッシュジョイン(HASH JOIN)
    • ソートマージジョイン(SORT MERGE JOIN)
  • 少なくとも4種類考えられる
  • なぜ ORM を目の敵にするか
続きを読む

ほとんどのエンジニアは「Staticオジサン」よりひどい2

前回の続きです。

目次

まずは間違いの例

たぶん、何も考えてない人は以下のようになったと思います。

f:id:Sikushima:20190417102129p:plain

基本構文を分かってない。どうしようもないですね。

もう少しマシな人の例

f:id:Sikushima:20190417102346p:plain

工夫はしたけれど、残念!

 

正解は次回。

ほとんどのエンジニアは「Staticオジサン」よりひどい3 - SQLer 生島勘富 のブログ

ほとんどのエンジニアは「Staticオジサン」よりひどい1

「Staticオジサン」が炎上して10年ほど経ちましたが、当時、私が指摘した通りほとんどのエンジニアは「Staticオジサン」よりひどく、10年経っても改善してないどころか、更にひどくなっているのではないかと思います。

目次

 

自分はできると思う人は例題にチャレンジ

「自分はできる」と思う人も、思わない人も、下の単純な問題にチャレンジしてみてください。

f:id:Sikushima:20190417101503p:plain

f:id:Sikushima:20190417101601p:plain

答え合わせは以下のリンクで

ほとんどのエンジニアは「Staticオジサン」よりひどい2 - SQLer 生島勘富 のブログ

ほとんどのエンジニアは「Staticオジサン」よりひどい3 - SQLer 生島勘富 のブログ

実行計画のキャッシュについて2 - 各RDBMSについて

SQL文の動的生成を避けるには、実行計画のキャッシュを意識しなければなりません。

そこで、RDBMS毎にキャッシュのやり方が違いますからその違いと、「本当はこういう構造にすれば良いのに」という提案について書きます。

 目次

続きを読む

実行計画のキャッシュについて1 - 分岐を避けるSQL

かつて文字列連結をして、SQL文を構築していた時代がありました。

現在では ORM を利用することが多いかもしれません。

しかし、論理演算をしっかり理解して工夫すれば SQL だけで WHERE句などを分岐せずに作ることが可能です。

目次

  • 目次
  • 分岐(IF文)か計算式か
  • 論理演算について
  • 分岐を避けるSQL
  • パースが必要(実行計画のキャッシュが使えない)

 

続きを読む

SQLでbit演算を使うパターン

WHERE句は論理演算の塊になるため、論理演算の理解は非常に重要です。

論理演算の応用として bit演算も SQL にもあります。

bit演算結果をデータとして保存することは、多用はいけませんが効果が高いこともあるのでご紹介します。

 

目次

  • 目次
  • FROM句、WHERE句での論理演算
  • bit演算式
  • bit演算式の例
  • ■ チューニング

 

続きを読む