SQL

MySQL

【MySQL】スロークエリログの見方と改善の第一歩

こんにちは、かつコーチです。前回はEXPLAINで個別クエリの実行計画を読む方法を解説しましたが、実務ではまず「どのクエリが遅いのか」を見つけるところから始まります。そこで活躍するのがスロークエリログです。今回は、スロークエリログの有効化か...
MySQL

【MySQL】EXPLAINでMySQLの実行計画を読む

こんにちは、かつコーチです。前回はインデックスの種類を整理しましたが、「インデックスを張ったのに速くならない」という相談は実務でも頻繁に起こります。原因を切り分けるには、MySQLが実際にどうクエリを実行しているかを可視化するEXPLAIN...
MySQL

【MySQL】MySQLのインデックスの種類(B-Tree・フルテキスト・空間インデックス)

こんにちは、かつコーチです。SQL基礎編では「インデックスを張ると検索が速くなる」というところまでお話ししました。ただ、MySQLには用途に応じて何種類かのインデックスが用意されていて、それぞれ得意な検索が違います。今回は「インデックス・パ...
MySQL

【MySQL】JSON型の使い方:半構造化データをMySQLで扱う

こんにちは、かつコーチです。前回はENUM・SET・TEXT系といったMySQL固有のデータ型を解説しました。今回はMySQL 5.7から導入されたJSON型を使って、半構造化データを扱う方法を解説します。JSON型とは?半構造化データを直...
MySQL

【MySQL】MySQL固有のデータ型(ENUM・SET・TEXT系の使い分け)

こんにちは、かつコーチです。アーキテクチャ編では、ストレージエンジンや文字コードの仕組みを解説しました。ここからはデータ型編として、MySQL固有のデータ型に絞って解説します。INT・VARCHARといった基本的な型はSQL基礎編で扱い済み...
MySQL

【MySQL】文字コード・照合順序(utf8mb4)でハマらないために

こんにちは、かつコーチです。前回はMySQLのアーキテクチャ全体像を解説しました。今回は、実務でつまずく人が非常に多い「文字コード」と「照合順序」の話です。絵文字が保存できない、日本語が「?」になる、といったトラブルの多くはここが原因です。...
MySQL

【MySQL】MySQLのアーキテクチャ全体像(サーバーレイヤーとストレージエンジンレイヤー)

こんにちは、かつコーチです。前回はInnoDBとMyISAMというストレージエンジンの違いを扱いました。この記事は上級者向けとして、ストレージエンジンがMySQL全体のどこに位置づけられているのか、アーキテクチャ全体像から解説します。トラン...
MySQL

【MySQL】InnoDBとMyISAMの違い:どちらのストレージエンジンを選ぶか

こんにちは、かつコーチです。入門編ではMySQLのインストールとGUIツールの使い方を解説しました。ここからはアーキテクチャ編として、MySQLの内部の仕組みに踏み込んでいきます。第1回は、MySQLの心臓部とも言えるストレージエンジン、特...
MySQL

【MySQL】MySQL WorkbenchでGUI操作をする基本

こんにちは、かつコーチです。前回はMySQL本体のインストール手順を解説しました。コマンドラインだけでMySQLを操作するのは、慣れないうちはハードルが高く感じるものです。今回は、MySQL公式が提供するGUIツール「MySQL Workb...
MySQL

【MySQL】MySQLのインストールと初期設定

こんにちは、かつコーチです。前回はMySQLがどんなデータベースなのかを解説しました。今回は実際に自分のPCにMySQLをインストールして、使える状態にするまでの手順を解説します。MySQL 8.0系を前提に進めます。インストール方法の選択...
MySQL

【MySQL】MySQLとは?世界で最も使われるOSS RDBMSを初心者向けに解説

こんにちは、かつコーチです。SQL基礎編では、SELECTやJOINといったSQL文法そのものを解説してきました。今回からはMySQLシリーズとして、MySQLという製品ならではの特徴や設定に絞って解説していきます。第1回は「MySQLとは...
SQL

【SQL】トランザクション分離レベルとダーティリード・ファントムリード

こんにちは、かつコーチです。前回はACID特性の4つの性質を解説し、その中のIsolation(独立性)には「強さ」の段階があるという話をしました。今回はその独立性を段階的に設定するトランザクション分離レベルを扱います。分離レベルの違いによ...
SQL

【SQL】ACID特性とは?トランザクションが守る4つの性質

こんにちは、かつコーチです。前回はEXPLAINで実行計画を読む方法を解説しました。ここから2本は、パフォーマンスと並んでデータベースの根幹をなす「整合性」の話に入っていきます。以前の記事でトランザクションのCOMMITとROLLBACKを...
SQL

【SQL】EXPLAINで実行計画を読む基本

こんにちは、かつコーチです。前回はインデックスがなぜ検索を速くするのかを解説しました。インデックスを作成したら、それが本当にクエリで使われているかを確認する必要があります。感覚や思い込みではなく、データベースに直接聞く方法がEXPLAINで...
SQL

【SQL】インデックスとは?なぜ検索が速くなるのか

こんにちは、かつコーチです。前回まではCREATE TABLEやデータ型、正規化といったテーブル設計の話を扱ってきました。テーブル設計をきちんと行っても、データ件数が増えてくると検索が遅くなる場面が出てきます。そこで登場するのがインデックス...
SQL

【SQL】正規化の考え方(第1〜第3正規形)

こんにちは、かつコーチです。これまでCREATE TABLE、データ型、主キー・外部キーとテーブル設計の要素技術を見てきました。今回はそれらを踏まえて、テーブル設計の理論的な支柱である正規化を扱います。この記事は前提知識ありきの上級者向け内...
SQL

【SQL】主キー・外部キーの役割と設定方法

こんにちは、かつコーチです。前回はデータ型の基本を解説し、テーブルの列にどんな型を設定すべきかを見てきました。これまでの記事で何度か登場していたPRIMARY KEYという言葉を、今回はしっかり掘り下げます。あわせて、複数のテーブルを結びつ...
SQL

【SQL】データ型の基本(数値・文字列・日付)

こんにちは、かつコーチです。前回はCREATE TABLEでテーブルを作成する方法を紹介しました。そのときにINTやVARCHAR(100)といった記述をカラムごとに付けましたが、これがデータ型です。データ型とは、その列にどんな種類のデータ...
SQL

【SQL】CREATE TABLEでテーブルを作成する

こんにちは、かつコーチです。ここまでの記事では、すでに用意されたテーブルに対してSELECTやINSERT・UPDATE・DELETEを実行する方法を見てきました。今回はいよいよ「テーブルそのものを自分で作る」ところに踏み込みます。CREA...
SQL

【SQL】トランザクションの基本:COMMIT・ROLLBACKでデータ操作を安全にする

こんにちは、かつコーチです。前回はDELETE文で、WHERE句を書き忘れると取り返しのつかない事故につながるという話をしました。「もし途中で間違いに気づいたら、実行前の状態に戻したい」——そう思ったことはないでしょうか。その願いを叶えてく...