SJ blog
database
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

PostgreSQL vs MySQL vs SQLite:用途別選択ガイド

3大RDBMSの特徴・違い・得意不得意を整理。Web APIバックエンド・組み込み・分析用途など、ユースケース別にどのDBを選ぶべきか実践的な視点で解説します。

一言結論

新規WebアプリのバックエンドDBは機能・正確性・拡張性の観点からPostgreSQLが第一選択であり、SQLiteは組み込みやテスト用途に、MySQLは既存エコシステムとの互換性が必要な場合にのみ選ぶのが合理的だ。

一言で言うと

PostgreSQL → 機能が豊富で正確。本番 Web アプリの第一選択肢
MySQL     → 速度重視・WordPress 等の歴史的資産。読み取り主体に強い
SQLite    → ファイル1つ。組み込み・テスト・小規模アプリに最適

詳細比較

機能PostgreSQLMySQLSQLite
ACID 準拠完全InnoDB は完全完全
JSON サポート最高(JSONB)JSON(インデックス弱い)なし
全文検索あり(tsvector)あり(MyISAM限定)FTS5 拡張
ウィンドウ関数ありあり(8.0+)あり(3.25+)
外部キーありあり(InnoDB)あり(要 PRAGMA)
レプリケーションStreaming Replication標準装備・成熟非対応
地理情報(GIS)PostGIS(最強)基本的な対応非対応
接続方式サーバープロセスサーバープロセスファイル直接
ライセンスPostgreSQL(自由)GPL or 商用パブリックドメイン

PostgreSQL を選ぶべき場面

  • 新規 Web アプリのバックエンド: JSON・配列・全文検索・GIS など豊富な型が活きる
  • 複雑なクエリ・分析: ウィンドウ関数・CTE・LATERAL 結合
  • 金融・会計: 厳密な数値計算(numeric 型)、ACID 完全保証
  • 地理情報アプリ: PostGIS 拡張で業界最強
-- PostgreSQL 独自の便利な機能例
-- JSONB で柔軟なデータ構造
SELECT data->>'name' FROM products WHERE data @> '{"in_stock": true}';

-- 配列型
SELECT unnest(tags) FROM articles GROUP BY 1 ORDER BY count(*) DESC;

-- CTEを使った再帰クエリ(組織ツリーなど)
WITH RECURSIVE org AS (
  SELECT id, name, parent_id FROM employees WHERE parent_id IS NULL
  UNION ALL
  SELECT e.id, e.name, e.parent_id FROM employees e JOIN org ON e.parent_id = org.id
)
SELECT * FROM org;

MySQL を選ぶべき場面

  • WordPress・Drupal 等の既存エコシステム: MySQL が標準
  • 読み取り主体・シンプルな構造: レプリカでの読み取りスケールが得意
  • クラウドマネージドサービス: Aurora MySQL は成熟度が高い
  • 移行コストが高い場合: 動いているなら変えない
-- MySQL の FULLTEXT 検索
CREATE FULLTEXT INDEX ft_idx ON articles(title, body);
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('TypeScript' IN NATURAL LANGUAGE MODE);

SQLite を選ぶべき場面

  • テスト・開発環境: 設定なしで使えて高速
  • 組み込み・モバイルアプリ: iOS・Android・Electron の標準 DB
  • 小規模サイト・CLI ツール: アクセスが少なく、デプロイがシンプル
  • エッジ・Cloudflare D1: Wasm ベースの SQLite
// Node.js でのSQLite(better-sqlite3)
import Database from "better-sqlite3";
const db = new Database("myapp.db");

const users = db.prepare("SELECT * FROM users WHERE email = ?").all(email);
// 同期 API でシンプル、非常に高速

選択フローチャート

本番 Web アプリを作る?
  YES → 複雑なデータ構造・JSON・地理情報が必要?
           YES → PostgreSQL
           NO  → 既存MySQL資産あり?
                    YES → MySQL
                    NO  → PostgreSQL(デフォルト選択)

テスト・プロトタイプ・組み込み? → SQLite

Cloudflare Workers で動かす? → D1(SQLite互換)

まとめ

2026年時点での推奨:

  • 新規プロジェクト(バックエンド): PostgreSQL がデフォルト選択
  • 既存 MySQL プロジェクト: 移行コストに見合う理由がなければそのまま
  • テスト・組み込み・軽量用途: SQLite 一択

PostgreSQL は機能・安定性・コミュニティの面で、現代のアプリケーション開発に最も適したデータベースです。


参考: PostgreSQL 公式 / SQLite 公式 / MySQL 公式