最終更新:
MySQLとPostgreSQLの違い — 商品表から、自分に必要な機能を選ぶ
どちらも商品の表から、条件で取り出せる
小さな商品管理アプリを作りたい!MySQLとPostgreSQL、最初はどう比べればいい?
どちらも表を使い、SQLで商品を登録・検索できるRDBMSだよ。まず共通の操作を覚え、必要な検索や保守の条件を比べよう。ここではMySQL 8.4のInnoDBとPostgreSQL 18の資料を基に、JSON・日本語検索・複製などの違いを見ていくね。
両方とも無料で使えるの?
MySQLにはGPLv2で提供されるものと商用ライセンスがあるよ。商用利用だから一律に有料なのではなく、独自ソフトと組み合わせて配布する場合などの条件が重要なんだ。PostgreSQLは利用・改変・配布を広く認めるPostgreSQLライセンスで、著作権表示などの条件がある。クラウドやサポートの料金は、ソフトのライセンスとは別に考えよう。
性能はどっちが速いの?
製品名だけでは決められないよ。データ量、クエリ、索引、同時接続数、設定、ハードウェアなどで結果が変わる。「MySQLは読み取り、PostgreSQLは書き込みが速い」と固定せず、実際に使う処理で測ろう。必要な整合性や耐久性の設定もそろえて比較することが大切だね。
JSONとか最近のデータ形式には対応してるの?
全文検索はどうなの?ブログの検索機能とかで使いたいんだけど。
MySQLにはFULLTEXT索引があり、日本語などに対応するngram解析器も組み込まれているよ。PostgreSQLにはtsvectorとtsqueryを使う全文検索があり、日本語検索の選択肢にはPGroonga拡張もある。単語の区切り方、必要な検索結果、クラウドで拡張を使えるかまで確認しよう。どちらも拡張が必須とは言えないんだ。
クラウドで使うときはどんなサービスがあるの?
例えばAWSのRDSにはMySQLとPostgreSQLがあり、Auroraにはそれぞれの互換エンジンがあるよ。ただし互換サービスは元のDBそのものではないので、対応バージョンや機能差の確認が必要だね。性能の倍率もすべての処理に当てはまるものではなく、自分の負荷や構成で費用と性能を比較しよう。
レプリケーションってデータのコピーを作る機能だよね?違いはあるの?
ちょっと深い話も聞きたいな。同時にデータを読み書きする仕組みって違うの?
MySQLのInnoDBとPostgreSQLはどちらもMVCCを使うけれど、実装が違うよ。InnoDBはUndo Logから過去の行を再構成し、不要な履歴はpurgeで片付ける。PostgreSQLは更新前の行バージョンを残し、不要な領域をVACUUMで再利用できるようにするんだ。標準ではautovacuumが有効だよ。機能だけでなく、こうした保守や既存システムとの相性も選ぶ基準になるね。
まずは同じ商品表を想像する
商品名と値段を保存し、180円以上を表示する小さなアプリなら、どちらでも基本のSQLが使えます。最初から「片方だけが速い」と覚える必要はありません。
以下は自分の空の練習用データベースで使う、両方に共通する基本SQLの例です。接続やユーザー作成はこの比較記事の範囲に含めません。
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price INTEGER NOT NULL
);
INSERT INTO products (id, name, price) VALUES
(1, 'りんご', 120),
(2, 'バナナ', 180),
(3, '牛乳', 250);
SELECT name, price
FROM products
WHERE price >= 180
ORDER BY price, id;
この条件ならバナナ180、牛乳250の順になります。自動採番・日付処理・JSON・照合順序などへ進むと、製品ごとの構文や動作の差が出てきます。
「このアプリに必要か」で選ぶ
| 目的 | MySQL 8.4 / InnoDB | PostgreSQL 18 |
|---|---|---|
| 商品と注文を表で扱う | SQLとトランザクションを学ぶ | 同じくSQLとトランザクションを学ぶ |
| JSONの属性から探す | 値を取り出す生成列や、配列の複数値索引など | jsonbと用途に合う索引など |
| 日本語の本文を探す | FULLTEXTとngram解析器など | 標準検索の言語条件を見て、PGroongaなども検討 |
| 既存システムへ組み込む | 対応版・ライブラリ・運用経験を確認 | 拡張の可否・対応版・運用経験を確認 |
| 安定して運用する | バックアップ・復元・複製・purgeなどを確認 | バックアップ・復元・複製・VACUUMなどを確認 |
ブログ検索なら実際の日本語の記事と検索語で、欲しい結果が出るかを試します。クラウドでは使える拡張や設定に制約があるため、ローカルで使えた機能がそのまま利用できるとは限りません。
性能の前に、移行・復元できるかを見る
同じデータ、検索条件、索引、整合性・耐久性の設定で測りましょう。MySQLは読み取り、PostgreSQLは書き込みと、固定の役割にはできません。複製方式もバックアップそのものではなく、誤削除が複製される場合があります。
PostgreSQLの論理複製ではテーブルを選べますが、DDLやシーケンスなどの制限があります。MySQLの複製も同期の条件を読みます。バックアップから復元する手順と、失敗時に戻す方法まで含めて選びましょう。
最初のSQLならSQL入門、まず1ファイルから試したい場合はSQLiteとDuckDBの比較へ。すでに使っているDBに大きな問題がなければ、比較記事だけを理由に乗り換える必要はありません。
参考資料
2026年10月9日確認。
- MySQL — Licensing — GPLv2と商用配布
- PostgreSQL — License — ライセンス条件
- MySQL 8.4 — JSON — JSONと索引
- PostgreSQL 18 — JSON — jsonbと索引
- MySQL 8.4 — ngram — 日本語の全文検索
- PostgreSQL 18 — Text search — tsvector/tsquery
- PGroonga — 日本語向け拡張
- AWS — RDS — 利用できるエンジン
- AWS — Aurora — 互換サービス
- MySQL 8.4 — Replication — 非同期・準同期の方式
- PostgreSQL 18 — Logical replication — 用途とメジャー版間の複製
- PostgreSQL 18 — Replication restrictions — DDL/シーケンスの制限
- MySQL 8.4 — MVCC — undoとpurge
- PostgreSQL 18 — Vacuum — 行バージョンと保守