Yabu.log

ITなどの雑記

Effective SQL 読書会(4)に参加

Effective SQL

Effective SQL

冒頭で書籍紹介。SQLパフォーマンス詳解

SQLパフォーマンス詳解

SQLパフォーマンス詳解

インデックスなどの説明が詳しい他の本。

様々な実装のインデックスなど日本語で説明している本は少ないとか?

  • MySQLはnested loop結合しかない

  • 中間一致の条件を使うとBTreeが使えない

    • like '%ELLE%'
  • 主キーのインデックスはリーフノードに値を持つ
  • 主キー以外のインデックスはリーフノードに主キーの値をもつ
    • セカンダリーインデックス
  • 多量のデータを検索する場合はインデックスが使われないものもある
    • 実装にもよるけど、数10パーセントの量とか

MySQLでは、インデックス宣言のASCキーワードとDESCキーワードは無視される

とあるが、MySQLは8.0から対応している

  • MySQLのchange buffer(index更新の最適化)

  • 冗長なインデックスの例

    • index(col1)
    • index(col1,col2)
    • というインデックスがある場合は、前者は冗長なので消すこと!
  • indexのrebuildは
  • 参照整合性のことをDRI(Declartive Referential Integrity)と書いてあるのは初めて見た
  • check制約
    • MySQL使えない。宣言してもエラーにはならないが無視される
    • トリガーを作るDBMSもある
  • トリーが、ストアドルーチンに可搬性はない
    • PLSQLはOracleのものだがEnterprizeDB,DB2でも動くように取り入れられている。
  • PostgreSQLBSDライセンスのため派生が作りやすい(たくさん)
  • 書籍データベースリファクタリングではデータ移行の段階としてトリガーをフル活用する
    • 部分インデックス
      • MySQLだと独自の意味(長い文字列の先頭3文字とか)
      • 他のDBMSだとindexにwhereが入ったもの(index化するデータを選択する)
  • パーティション分割は必ず早くなるわけではない
  • 適当なWHERE句が必要。
  • インデックスのフィルター化
  • MySQLでは使えない
  • データに寄せる(寿命の長い方に設計を寄せる)
  • ストアドなどはオプティマイザが見ない?
  • MySQLは大文字小文字を区別している
    • FS依存
    • 他のDBは区別しない
  • 最近はNULLS FIRST,NULLS LASTをサポートしているDBは他にもあるはず
    • MSQLとSQLServer以外は最近はサポートしている
  • UNKNOWNリテラルは存在する。
  • SQLパフォーマンス詳細の作者が書いているブログが面白い(luke!indexを使え!)

use-the-index-luke.com

- SQL2016の詳解など
  • rtfm(Read The F***ing Manual)
  • サポートの人がよく使うスラングらしい

    感想

    インデックスのフィルター化は初めて知りました。

余談ですが初参加。スケジュールに調整がつかなかったり、体調が悪かったりして参加ができていなかった。 ちなみに今日も1時間しか寝ていないので死ぬほどしんどい。