TONY0922のブログ

学んだことを適当に記録していくブログです。主にRuby, Java, PHPで仕事してます。更新頻度はそんなに高くないので、ご了承下さい。

実践ハイパフォーマンスMySQL 第2版 を読んだ。

実践ハイパフォーマンスMySQL 第2版

実践ハイパフォーマンスMySQL 第2版

【所管】
MySQLに関する内容が詳しすぎ。
1/3くらいしか読めてないけど、時間を見つけてもっと読みたい。

【読書メモ】

  • MySQLはテーブルごとにトランザクションの有無を設定をすることが可能。
  • ロックはオーバーヘッドを要求するため、トランザクションを不要とするテーブルはMyISAMを選択すると良い。
  • InnoBDトランザクションの分離レベルは「REPEATABLE READ」である。
  • MySQLをUPDATEする際はディスクではなく、メモリーの値を更新する。その後、ディスクにシーケンシャルIQにて更新する。その間のクラッシュした際のデータを保証するために、ログ先行書き込みを行う。
  • トランザクションテーブルと非トランザクションテーブルを両方を一回のトランザクション内で更新すると、ロールバック時に非トランザクションだけ出来ないので注意すること。つまり、複数のエンジンを一つのトランザクションで管理はできない。
  • Nullはカラムに入らないように工夫すること。Nullが必要になるところも他の値で代用できないかを検討する。(パーフォーマンスが上がるため)
  • そのカラムにインデックスの使用を考える場合は、NotNullを検討する事。
  • 整数に「unsigned」をつけると-2^N 〜 2^N の範囲を0 〜 2^2Nの正の範囲として倍にできる。
  • INT(20)は値の有効な範囲を制限するわけではなく、対話ツールが表示目的で確保する文字列を指定する。
  • 浮動小数点型の精度はMySQLのデータ型を選択したり、値を丸めたりする。従って,精度ではなく型を選択すると良い。
  • TIMESTAMPとDATETIMEの違いは比較。TIMESTAMPを選んだほうがストレージ効率が良い。
  • 識別子IDにふさわしい方が何であるか。
    • 整数型…AUTO_INCREMENT使える。何であるか。IDにうってつけ。
    • ENUMSET…ふつーに使わない。
    • 文字列…めっちゃパフォーマンス悪い。
    • IDの型は決めたら、関連する外部キーも必ず一緒にすること。(UNSIGNも含め)