「MySQL DBA 修炼之道」の読書メモ

第 1 章:MySQL を理解する

  1. 三層アーキテクチャ:
    1. プレゼンテーション層(UI):ユーザーと直接やり取りする画面。
    2. ビジネスロジック層(BLL):業務ロジックとユーザーのリクエストを処理する。
    3. データアクセス層(DAL):データベースの追加、参照、更新、削除などを行う。
  2. SQL(構造化問い合わせ言語)は宣言的な言語で、何を取得するかを指定し、取得方法は指定しない。データベースはアルゴリズムと統計情報で最適なアクセス経路を計算する。これを担うのが optimizer。
  3. MySQL の権限:
    1. 参照、追加、更新、削除を許可する:grant select,insert,update,delete on db_name.* to user_name@ '10.%' identified by 'pwd'
    2. 権限を取り消す:revoke select,insert,update,delete on db_name.* from user_name@ '10.%'
  4. ストレージエンジン:ARCHIVE は企業の大量の取引データを保存するために設計された。zlib の可逆圧縮を使い、データを挿入時に圧縮してアーカイブテーブルに保存する。insert と select、自動採番キーとそのインデックスだけをサポートし、他のインデックスは使えない。u、d やインデックスが不要なログ分析、ユーザー行動分析に向く。
  5. MySQL は MYSQL サーバー、mysql はクライアントを指す。
  6. 入力を消すには '\c を使う。前の文がシングルクォートならシングルクォート、ダブルクォートならダブルクォートを使う。
  7. MySQL の主な設定:
    1. innodb_buffer_pool_size:書き込み性能向上のため、データやアクセス傾向が不明なら物理メモリの 70%-80% にする。
    2. innodb_log_file_size:ロググループ内の各ファイルのサイズ。256mb 以上を推奨。
    3. innodb_flush_log_at_trx_commit:推奨は 2、デフォルトは 1。2 ではコミット時にログバッファーをファイルへ書くが、ディスクへのフラッシュはしない。
    4. sync_binlog:ディスクと同期しない 0 を推奨。autocommit では文ごと、それ以外ではトランザクションごとにバイナリログへ書く。

第 3 章

  1. 開発の基礎:
    1. データモデル:データの定義と形式、つまりデータの構成を表す。関係モデルでは二次元の表でエンティティーとその関係を表し、各表を関係とも呼ぶ。
    2. DLL → データ定義言語(Data Definition language):データ構造やデータベースオブジェクトを定義する。データベースや表の作成などに使う(create、alter、drop)。
    3. DML → データ操作言語(Data Manipulation Language):データを検索・変更する。select、insert、update、delete の四つ、つまり CRUD(create、read、upadte、delete)。
    4. XML(eXtensible Markup Language) は拡張可能なマークアップ言語で、当初は Internet 上でのデータ交換を目的としていた。
    5. xml はデータの転送と保存を行い、タグでデータの内容を説明する。HTML は表示のためのもので、タグでデータの書式を指定する。
  2. データ型:以下はすべて符号付き。
    1. tinyint:1 バイト、範囲 -128~~127。
    2. smallint:2 バイト、-32768 ~~ 32767。
    3. mediumint:3 バイト、-8388608~~8388607。
    4. int:4 バイト、-2147483648~~2147483647。
    5. bigint:8 バイト、-9223372036954775808~~9223372036954775807。
    6. float:値は丸められる。
    7. 日付と時刻:
      1. NO_ZERO_DATES の SQL モードを使わない場合、MySQL はデフォルトで date または datetime 列に限り、月や日が 0 の日付を許可する。
      2. 70~99 は 1970-1999。
      3. 00~69 は 2000-2069。
      4. 日付と時刻の両方には datetime、8 バイト。
      5. 日付だけなら date、3 バイト。
      6. timestamp は utc で保存され、保存時に現在のタイムゾーンから変換し、取得時に戻す。現在のタイムゾーンのデフォルトは time_zone システム変数。4 バイト。
      7. time は 3 バイト。
      8. 年だけを表示する year は 1 バイト。
  3. インデックスの紹介:
  4. 種類:
    1. B 木(B-tree)、ハッシュ(hash)、空間(R-tree)、全文(full-text)インデックス。
    2. 論理上の分類は、単一列、複合(複数列)、一意(Unique)、非一意(Non Unique)インデックス。
  5. クラスタ化インデックス:キーの論理順序が、対応する表の行の物理順序と同じもの。データとインデックス(B+tree)が一体で、レコードは葉に保存される。インデックス構成表とも呼ばれ、反対が非クラスタ化インデックス。InnoDB はクラスタ化インデックスを使う。
  6. インデックス検索:
    1. 左端のプレフィックスの原則で絞り込む。
  7. MySQL オプティマイザー:
    1. explain 出力の extra の意味:
      1. select tables optimized away:MIN、MAX をインデックス情報だけで処理でき、物理レコードを取得する必要がない。
      2. Using index:カバリングインデックス。必要なデータをすべてインデックスから取得でき、物理レコードを読まない。
最新情報を受け取る

Telegram や X で毎週のリサーチ、市場シグナル、上場情報をチェック。