MySQLの備忘録。調査結果を忘れないように記載。
MySQL のロック機構とデッドロック対策 入門新着!!
Web アプリケーションで同時アクセスが増えると、「Deadlock found when trying to get lock」や「Lock wait timeout exceeded」といったエラーに遭遇します。これらは MySQL(I…
大量データの INSERT / UPDATE パフォーマンスチューニング
数万〜数百万件規模のデータを RDB へ投入・更新するバッチ処理では、素朴な「1 行ずつループして INSERT / UPDATE」がそのまま数十分〜数時間のボトルネックになります。本記事では、大量データの INSERT / UPDATE …
Docker Compose で Django + MySQL 環境を構築する
Django の開発環境をチームで共有しようとすると、「自分の環境では動くのに」という問題が必ず出てきます。Python のバージョン、MySQL のバージョン、ローカルにインストールしたパッケージの差分──これらを揃えるのは地味に面倒です…
MySQL の文字コードと照合順序(utf8mb4)入門
MySQL を使っていると、「絵文字を保存したら Incorrect string value エラーが出た」「大文字小文字を区別したいのに区別されない」といった文字まわりのトラブルに遭遇します。これらはほぼすべて、文字コード(charac…
EXPLAIN の読み方と実行計画の改善 ハンズオン
「一覧画面が重い」「夜間バッチが終わらない」。この種の相談の多くは、特定の SQL が想定外のアクセス経路(実行計画)で動いていることが原因です。インデックスを追加すれば直ることもありますが、まず必要なのは「DB が今どう動いているか」を正…
非正規化のユースケースとトレードオフ ― 入門
RDB設計を学ぶと、まず「正規化しなさい」と教わります。第1〜第3正規形まで整えれば、データの重複が消え、更新時の矛盾(更新不整合)が起きにくくなる。これは正しい出発点です。
複合インデックスの設計とカーディナリティ入門
テーブルにインデックスを張ったのにクエリが速くならない。あるいはインデックスはあるのにスキャン行数が減らない。こうした状況の多くは、「複合インデックスの列順」と「カーディナリティ」への理解不足から生まれます。
インデックスの仕組みと設計原則:入門
「SELECT が遅い」「件数が増えたら急に重くなった」——こうした悩みの多くはインデックス設計で解決できます。本記事では、RDB(MySQL / PostgreSQL を想定)のインデックスがどう動くのかを、B-Tree の仕組みから設計…
外部キーと参照整合性の設計:入門から実務判断まで
リレーショナルデータベースでは、複数のテーブルが「参照」で結びついています。注文テーブルの userid はユーザーテーブルの誰かを指し、注文明細の orderid はどこかの注文を指します。この「指す・指される」の関係が壊れると、どのユー…
DB設計の失敗パターンと改善事例 ― 現場でよく踏む地雷とその外し方
アプリケーションの寿命は、DB設計の質にかなり左右されます。コードはリファクタリングで直せますが、テーブル設計の失敗は本番データを抱えたまま直すことになるため、修正コストが桁違いに高くなります。
