Yabu.log

色々勉強するブログです

Effective SQL 読書会(5)に参加

参加者が少なかったので木村さんの話がいつもより多く聞けました。 サポートやコンサル、DBMSの制作などをされている方なのでその膨大な知見に毎度驚かされます。

今回は

  • (続き)第2章 プログラム可能性とインデックスの設計
    • 項目17 計算値をインデックスで使用する状況を理解する
  • 第3章 設計を変更できないときはどうするか
    • 項目18 変更できないものはビューを使って単純化する
    • 項目19 ETLを使って非リレーショナルデータを情報に変える
    • 項目20 サマリテーブルを作成して管理する

を読みました

Effective SQL

Effective SQL

  • SQLServerの計算処理はC言語のライブラリを使っている

    • ビルド(32bit or 64bit,win/linux/mac)によって微妙に計算結果が違っていたらしする
    • 最近はOS間の違い(Cのライブラリ?)が少なくなってきている
  • SQLServerANSI_NULLS

過去のSQLServerではNULLが値として扱われていた。 そのためNULL is NULLじゃなくてNULL = NULLでもTrueとなる ANSI_NULLSオプションをオンにするとこのようなおかしな挙動を防げる 最近だとデフォルトで有効化されているので安心。

  • MySqlのTIMESTANP型はタイムゾーンを考慮する
  • 関数ベースのインデックスは決定関数でしか使えない
  • 関数か決定的かどうかは関数定義時に特殊なキーワードを使う
    • DETERMINISTIC句(Oracle)
    • IMMUTABLE句(PostgreSQL)
    • その関数が決定的かどうかはコンパイル時にわからない。
      • インデックスに利用する関数が決定的であることはプログラマが責任を持たなければならない。
  • SQLliteの専門的な知見を持っている日本人はかなり少ない
    • らしいです
  • ETLツール
    • 静的なデータファイルをDBにインポートするツール
    • それらしいものは何度か触ったことがあるが、ETL(Extract, Transform, Load)という名称は知らなかった
    • 商用のものだとData Spiderなんかも有名
    • PostgreSQLではTALEND(OSS)なんかが利用可能
  • 計算量の大きいデータをキャッシュする仕組み
    • マテリアライズドビュー
    • サマリーテーブル
      • サマリーテーブルは有用だがあまり活用されないらしい
  • MySQLのイベントスケジューラー

  • Raspberry Pi

    • 最近は64bitのOSもある
      • 最近までARMは32bitのOSが殆どだったらしい
    • 並列計算にも利用されている

ラズパイは正直、あまり大規模ではない組み込み用途か教育用でしか利用できないと思っていたが、 分散システムのようなものを作ってパフォーマンスがシビアな状況でも利用しているらしい

次回は「項目21 UNIONを使って非正規化データをアンピボットする」から