「MySQL DBA 修炼之道」の読書メモ
第 1 章:MySQL を理解する
- 三層アーキテクチャ:
- プレゼンテーション層(
UI):ユーザーと直接やり取りする画面。
- ビジネスロジック層(
BLL):業務ロジックとユーザーのリクエストを処理する。
- データアクセス層(
DAL):データベースの追加、参照、更新、削除などを行う。
SQL(構造化問い合わせ言語)は宣言的な言語で、何を取得するかを指定し、取得方法は指定しない。データベースはアルゴリズムと統計情報で最適なアクセス経路を計算する。これを担うのが optimizer。
- MySQL の権限:
- 参照、追加、更新、削除を許可する:
grant select,insert,update,delete on db_name.* to user_name@ '10.%' identified by 'pwd'
- 権限を取り消す:
revoke select,insert,update,delete on db_name.* from user_name@ '10.%'
- ストレージエンジン:ARCHIVE は企業の大量の取引データを保存するために設計された。zlib の可逆圧縮を使い、データを挿入時に圧縮してアーカイブテーブルに保存する。
insert と select、自動採番キーとそのインデックスだけをサポートし、他のインデックスは使えない。u、d やインデックスが不要なログ分析、ユーザー行動分析に向く。
MySQL は MYSQL サーバー、mysql はクライアントを指す。
- 入力を消すには
'\c を使う。前の文がシングルクォートならシングルクォート、ダブルクォートならダブルクォートを使う。
MySQL の主な設定:
innodb_buffer_pool_size:書き込み性能向上のため、データやアクセス傾向が不明なら物理メモリの 70%-80% にする。
innodb_log_file_size:ロググループ内の各ファイルのサイズ。256mb 以上を推奨。
innodb_flush_log_at_trx_commit:推奨は 2、デフォルトは 1。2 ではコミット時にログバッファーをファイルへ書くが、ディスクへのフラッシュはしない。
sync_binlog:ディスクと同期しない 0 を推奨。autocommit では文ごと、それ以外ではトランザクションごとにバイナリログへ書く。
第 3 章
- 開発の基礎:
- データモデル:データの定義と形式、つまりデータの構成を表す。関係モデルでは二次元の表でエンティティーとその関係を表し、各表を関係とも呼ぶ。
- DLL → データ定義言語(
Data Definition language):データ構造やデータベースオブジェクトを定義する。データベースや表の作成などに使う(create、alter、drop)。
- DML → データ操作言語(
Data Manipulation Language):データを検索・変更する。select、insert、update、delete の四つ、つまり CRUD(create、read、upadte、delete)。
XML(eXtensible Markup Language) は拡張可能なマークアップ言語で、当初は Internet 上でのデータ交換を目的としていた。
xml はデータの転送と保存を行い、タグでデータの内容を説明する。HTML は表示のためのもので、タグでデータの書式を指定する。
- データ型:以下はすべて符号付き。
tinyint:1 バイト、範囲 -128~~127。
smallint:2 バイト、-32768 ~~ 32767。
mediumint:3 バイト、-8388608~~8388607。
int:4 バイト、-2147483648~~2147483647。
bigint:8 バイト、-9223372036954775808~~9223372036954775807。
float:値は丸められる。
- 日付と時刻:
NO_ZERO_DATES の SQL モードを使わない場合、MySQL はデフォルトで date または datetime 列に限り、月や日が 0 の日付を許可する。
70~99 は 1970-1999。
00~69 は 2000-2069。
- 日付と時刻の両方には
datetime、8 バイト。
- 日付だけなら
date、3 バイト。
timestamp は utc で保存され、保存時に現在のタイムゾーンから変換し、取得時に戻す。現在のタイムゾーンのデフォルトは time_zone システム変数。4 バイト。
time は 3 バイト。
- 年だけを表示する
year は 1 バイト。
- インデックスの紹介:
- 種類:
- B 木(
B-tree)、ハッシュ(hash)、空間(R-tree)、全文(full-text)インデックス。
- 論理上の分類は、単一列、複合(複数列)、一意(
Unique)、非一意(Non Unique)インデックス。
- クラスタ化インデックス:キーの論理順序が、対応する表の行の物理順序と同じもの。データとインデックス(
B+tree)が一体で、レコードは葉に保存される。インデックス構成表とも呼ばれ、反対が非クラスタ化インデックス。InnoDB はクラスタ化インデックスを使う。
- インデックス検索:
- 左端のプレフィックスの原則で絞り込む。
- MySQL オプティマイザー:
explain 出力の extra の意味:
select tables optimized away:MIN、MAX をインデックス情報だけで処理でき、物理レコードを取得する必要がない。
Using index:カバリングインデックス。必要なデータをすべてインデックスから取得でき、物理レコードを読まない。
最新情報を受け取る
Telegram や X で毎週のリサーチ、市場シグナル、上場情報をチェック。