MySQL備忘録
MySQL のロック機構とデッドロック対策 入門新着!!

Web アプリケーションで同時アクセスが増えると、「Deadlock found when trying to get lock」や「Lock wait timeout exceeded」といったエラーに遭遇します。これらは MySQL(I…

続きを読む
サーバーサイド
Laravel Sailで始めるDocker開発環境構築ハンズオン

Laravel Sail は、Docker 上で Laravel の開発環境を手軽に立ち上げる公式ツールです。PHP・MySQL・Redis などをローカルに直接インストールせず、./vendor/bin/sail up 一発で開発に必要な…

続きを読む
php備忘録
Laravelのカラム変更マイグレーション:ネイティブ change() と doctrine/dbal の使い分け

Laravel のマイグレーションでは、「カラムの型を変えたい」「NULL 許可を切り替えたい」「カラム名をリネームしたい」という変更が頻繁に発生します。新規テーブルの作成と違い、既存カラムを変更する操作は、歴史的に doctrine/db…

続きを読む
MySQL備忘録
大量データの INSERT / UPDATE パフォーマンスチューニング

数万〜数百万件規模のデータを RDB へ投入・更新するバッチ処理では、素朴な「1 行ずつループして INSERT / UPDATE」がそのまま数十分〜数時間のボトルネックになります。本記事では、大量データの INSERT / UPDATE …

続きを読む
MySQL備忘録
Docker Compose で Django + MySQL 環境を構築する

Django の開発環境をチームで共有しようとすると、「自分の環境では動くのに」という問題が必ず出てきます。Python のバージョン、MySQL のバージョン、ローカルにインストールしたパッケージの差分──これらを揃えるのは地味に面倒です…

続きを読む
MySQL備忘録
MySQL の文字コードと照合順序(utf8mb4)入門

MySQL を使っていると、「絵文字を保存したら Incorrect string value エラーが出た」「大文字小文字を区別したいのに区別されない」といった文字まわりのトラブルに遭遇します。これらはほぼすべて、文字コード(charac…

続きを読む
MySQL備忘録
EXPLAIN の読み方と実行計画の改善 ハンズオン

「一覧画面が重い」「夜間バッチが終わらない」。この種の相談の多くは、特定の SQL が想定外のアクセス経路(実行計画)で動いていることが原因です。インデックスを追加すれば直ることもありますが、まず必要なのは「DB が今どう動いているか」を正…

続きを読む
MySQL備忘録
複合インデックスの設計とカーディナリティ入門

テーブルにインデックスを張ったのにクエリが速くならない。あるいはインデックスはあるのにスキャン行数が減らない。こうした状況の多くは、「複合インデックスの列順」と「カーディナリティ」への理解不足から生まれます。

続きを読む
MySQL備忘録
インデックスの仕組みと設計原則:入門

「SELECT が遅い」「件数が増えたら急に重くなった」——こうした悩みの多くはインデックス設計で解決できます。本記事では、RDB(MySQL / PostgreSQL を想定)のインデックスがどう動くのかを、B-Tree の仕組みから設計…

続きを読む
php備忘録
外部キーだらけの旧DBを新DBへ移行する — Seederの依存解決とDB定義書からのDDL自動生成

ある業務システムのリニューアル案件で、旧DBから新DBへデータを移し替える「シーディング(初期データ投入)基盤」をPHPで整備しました。設計の核は2つです。

続きを読む