• Postgresは、複雑なクエリや大規模なデータベースを扱うことができる機能豊富なデータベースです。
  • MySQLは、設定や管理が比較的簡単で速い上、信頼性が高く、ナレッジが普及しているシンプルなデータベースです。
    Postgresは、オブジェクトリレーショナルデータベース(ORDBMS)であり、テーブルの継承や関数のオーバーロードなどの機能を備えていますが、MySQLが純粋なリレーショナルデータベース(RDBMS)であるのに対して、Postgresはオブジェクトリレーショナルデータベース(ORDBMS)です。

Integrate Your Data Today!

Try Xplenty free for 7 days. No credit card required.

ほとんどの開発者は、ウェブサイトやオンライントランザクションにはMySQLが適しており、大規模で複雑な分析プロセスにはPostgreSQLが適していると言うでしょう。また、PostgreSQLには「多くの優れた機能」が搭載されており、拡張性やネイティブNoSQL機能など、困難なデータベースを取り巻く課題に対処するのに役立つことも指摘されています。最後に、MySQLは「速度と信頼性」に重点をおき、機能が少ないことも指摘されています。

ほとんどの場合、上記の見解は正しいものです。新しいリリースが出るたびに、MySQLとPostgreSQLが提供しているサービスがより近しくなって来ていますが(表を参照)、この詳細な特徴は、特定のユースケースではどちらか一方の方が優れている可能性があることを表しています。

Feature Comparison PostgreSQL 10 MySQL 8
Common Table Expression (CTE) Yes Yes (Newly Added)
Declarative Partitioning Yes (Newly Added) Yes
Full-text Search Yes Yes
Geographic Information System (GIS) / Spatial Reference System (SRS) Yes Yes (Upgraded)
JSON Yes Yes (Upgraded)
Logical Replication Yes (Newly Added) Yes
Semi-Synchronous Replication Yes (Newly Added) Yes
Window Functions Yes Yes (Newly Added)

このガイドでは、MySQLとPostgreSQLの異なる特徴を理解して、どちらの方がみなさんのユースケースに適しているかを判断できるようサポートします。

  1. MySQLとPostgreSQL 概要

  2. なぜ開発者はどちらか一方を選ぶのか?

  3. ユーザーサポート MySQL vs. PostgreSQL

  4. MySQLとPostgesどちらが早い?

  5. どのプログラミング言語をサポートしているか?

  6. OS互換性について

  7. どのようにインデックスを行うか?

  8. コーディングの際に注意すべき違いは?

MySQLとPostgreSQL 概要

MySQL: 概要

世界で最も普及しているDBMSとして - 2019年には開発者の39%が使用しています。  MySQLは、高速で信頼性が高く、汎用的なリレーショナルデータベース管理システムです。PostgreSQLの豊富な機能を欠いていますが、幅広いアプリケーション、特にWebアプリケーションとの相性は抜群です。

実際、MySQLはスケーラブルなWebアプリケーションに最適な選択肢です。これは、LAMPスタック(Linux、Apache HTTP Server、MySQL、PHPで構成されるオープンソースのWebアプリケーション群)に標準で含まれていることも理由の一つです。さらに、Drupal、Joomla、WordPress などの一般的なコンテンツ管理システムは MySQL に依存しているため、ウェブ上のあらゆる場所で MySQL が使用されています。

SQL Workbench showing database tables

MySQLの追加の特徴をご紹介します。

  • オープンソース:MySQLはフリーでオープンソースのリレーショナルデータベース管理システム(RDBMS)です。
  • 歴史が長い:MySQL は 1995 年から利用されてきました。
  • オラクルによる保守:オラクルは MySQL を所有・保守しており、追加サービス、独自のプラグイン、拡張機能、ユーザーサポートを備えたプレミアム版 (有料) を提供しています。
  • 協力的なコミュニティ:ボランティアによる献身的なコミュニティが、必要に応じてトラブルシューティングをサポートします。
  • 安定性と信頼性:データベースを「整頓」し、定期的にメンテナンスを行っている限り、MySQL は非常に安定した RDBMS であることがユーザーの間で広く認められています
  • MVCC の機能:MySQLは現在、マルチバージョン コンカレンシー コントロール(MVCC)機能を提供しています。この機能はPostgreSQLの方がより広く知られている機能です(これについては後述します)。
  • 頻繁な更新:MySQLは、新機能やセキュリティの改善を伴う頻繁なアップデートの恩恵を受けています。最新のアップデートは、2019年4月25日のバージョン8.0.16でした。(2020年10月7日時点では、バージョン8.0.21が最新
  • 4.3 つ星評価:MySQLは、G2Crowd上の1,261件のレビューから4.3つ星評価(5つ星のうち)を得ています。 

G2CrowdのレビュアーによるMySQLの素晴らしいサマリーをご紹介します。

MySQLは、オープンソースであり、フリーで安定したデータベース管理システムであり、本番アプリケーションで使用することができます。軽量なデータベースであり、開発者がデスクトップにインストールして使用するだけでなく、大規模な多階層アプリケーションを搭載した本番アプリケーションサーバーにもインストールして使用することができます。Windows、Linux、Macなどあらゆるプラットフォームにインストールが可能です。安全性が高く、セキュリティ上の脆弱性もありません。

MySQLの注目すべきユーザーは以下のとおりです。:

  • Facebook
  • Google
  • Flickr
  • GitHub
  • NASA
  • Netflix
  • Spotify
  • Tesla
  • Twitter
  • Uber
  • US Navy
  • WeChat
  • Wikipedia
  • YouTube
  • Zappos
  • Zendesk

Integrate Your Data Today!

Try Xplenty free for 7 days. No credit card required.

PostgreSQL: 概要

PostgreSQLは、複雑で大量のデータ操作を行うための最適なソリューションとして認知されています。これは、PostgreSQLが特殊なデータベース課題の処理に優れているからです(これについては後ほど詳しく説明します)。

PostgreSQLは他のデータベース管理システムよりも「より多くの機能を持っています」(ユーザがこれを証明しています)。また、PostgreSQLは「運用がカタログ駆動であるため」拡張性があります。つまり、単にテーブルやカラムの情報を格納するだけではなく、データ型やインデックス型、関数を定義することができます。

PostgreSQLを際立たせているその他の点として、PostgreSQLがオブジェクトリレーショナルであり、ACIDに準拠しており、高度な同時実行性を持ち、NoSQLをサポートしているということが挙げられます。

最後に、PostgreSQLは世界で最も「人気のある」データベースシステムではありませんが、過去2年間で最も急成長しているDBMSとしてDatabase of the Year賞を受賞しています。

pgAdmin showing a PostgreSQL table

以下にPostgreSQLの追加の特徴を示します。

  • オープンソース:PostgreSQLはフリーでオープンソースのオブジェクトリレーショナルデータベース管理システム(ORDBMS)です。RDBMSではなくORDBMSであるPostgreSQLは、オブジェクト指向とリレーショナルデータベースの両方の機能を可能にします。
  • カスタマイズ可能:プラグインを開発することで、PostgreSQLをカスタマイズして、DBMSを要件に適合させることができます。PostgreSQLでは、C/C++やJavaなどの他のプログラミング言語で作られたカスタム関数を組み込むこともできます。
  • 長い歴史:PostgreSQLは1988年から利用されてきました。
  • 頻繁な更新:PostgreSQLの最新のアップデートは2019年5月9日のバージョン11.3でした。(2020年10月7日時点では、2020年9月17日 バージョン13が最新)
  • リベラルなオープンソースライセンス: PostgreSQLはリベラルなオープンソースライセンスを特徴としており、DBMSを好きなように使用、変更、配布することができます。
  • MVCCの特徴:PostgreSQLは、マルチバージョン同時実行制御(MVCC)機能を実装した最初のDBMSでした。
  • 協力的なコミュニティ:開発者やボランティアからなる献身的なコミュニティが、必要に応じてサポートを受けることができます。プライベートなサードパーティのサポートサービスも利用できます。同一コミュニティがPostgreSQLをサポートし、PostgreSQL Global Development Groupを介してプラットフォームを更新しています。
  • 4.4つ星評価:G2Crowdの415件のレビューの中から4.4つ星(5つ星のうち)の評価を得ています。

以下は、G2CrowdのユーザーからのPostgreSQLの素晴らしいサマリーです。

PostgreSQLはオープンソースのリレーショナルデータベースの中で最も興味深いオプションの一つです。無料です...それに加えて、今日では多くの高度なオプションを提供しています。実際、今日では最も先進的なデータベースエンジンと考えられています。Postgresでは、トランザクションを作成する際に読み込みロックを使用する必要がないので、より大きなスケーラビリティが得られます。また、このツールは個人や企業によって管理されているのではなく、開発者のコミュニティによって管理されており、私たちの仕事をより簡単に、より速くするのに役立っています。

PostgreSQLのユーザー企業は以下のとおりです。

  • Apple
  • BioPharm
  • Cisco
  • Debian
  • Etsy
  • Facebook
  • Fujitsu
  • IMDB
  • Instagram
  • Macworld
  • Red Hat
  • Skype
  • Spotify
  • Sun Microsystem
  • Yahoo

なぜ開発者はどちらか一方を選ぶのか?

「機能が豊富な」選択肢として、PostgreSQLは開発者から多くの支持を得ています。以下の説明にあるように、PostgreSQLには多くの機能が備わっています。それにもかかわらず、データベース設計に関しては、MySQLのシンプルさ、簡単さ、その他の特徴が、特定のユースケースにおいては、より価値があります。この点に関して、DBMS はそれぞれ異なる分野で優れています。

DBMS開発者がなぜどちらか一方を選ぶのかという観点から、MySQLとPostgreSQLの主な特徴を見てみましょう。

なぜ開発者はMySQLを選ぶのか?

ここでは、MySQLの最も重要な利点をいくつか紹介します。

高い柔軟性と拡張性: MySQLでは、幅広いストレージエンジンから選択することができます。これにより、さまざまなテーブルタイプのデータを柔軟に統合することができます。MySQL 8.0は以下のストレージエンジンをサポートしています

  • InnoDB
  • MyISAM
  • Memory
  • CSV
  • Archive
  • Blackhole
  • NDB/NDBCLUSTER
  • Merge
  • Federated
  • Example

スピードと信頼性を重視:特定の SQL 機能を含まないことで、MySQL はスピードと信頼性を優先して軽量化を図っています。MySQLのスピードは、同時実行性の高い読み取り専用の機能に関しては特に顕著です。このため、特定のビジネス・インテリジェンス目的には最適な選択となります。しかし、高負荷時に多くの複雑なクエリを実行する必要がある場合は、PostgreSQLの方が良い選択かもしれません。

サーバ最適化のためのオプション:MySQLは、sort_buffer_size、read_buffer_size、max_allowed_packetなどの変数を調整することで、MySQLサーバを微調整して最適化するための多くのオプションを提供しています。

使いやすく人気がある: MySQLの人気が高いということは、MySQLの経験が豊富なデータベース管理者を簡単に見つけることができるということです。また、他のDBMSソリューションのようにセットアップが簡単で、微調整を必要としないという報告もあります。このチュートリアルでは、初心者が初めての MySQL データベースのセットアップがいかに簡単かをご紹介します。さらに、多くのフロントエンド(Adminer、MySQL Workbench、HeidiSQL、dbForge Studioなど)がMySQLにグラフィカル・インターフェースを追加し、よりユーザーフレンドリーな体験を提供しています。

クラウド対応のDBMS:MySQLはクラウドに対応しており、多くのクラウドプラットフォームでは、有料でMySQLデータベースをインストールして保守してくれるMySQL機能を提供しています。

InnoDBエンジンで利用可能なマルチバージョン同時実行制御(MVCC)とACIDコンプライアンス: MySQLの現在のバージョンのデフォルトエンジンはInnoDBです。これにより、MVCC と ACID コンプライアンスが追加されます。しかし、MySQL上のInnoDBではMyISAMテーブル形式のため、テーブルが破損する問題が発生する可能性があります。MySQLによると、「MyISAMテーブルフォーマットは非常に信頼性が高い(SQLステートメントによって行われたテーブルへの変更はすべてステートメントが戻る前に書き込まれる)ものの、破損したテーブルが発生する可能性がある 」とのことです。さらに、別のエンジンを選択すると、おそらく MVCC や ACID コンプライアンスを失うことになるでしょう。

なぜ開発者はPostgreSQLを選ぶのか?

ここでは、PostgreSQLの最も重要な利点をいくつか紹介します。すでに、このDBMSがなぜ少しだけ技術的な知識を必要とするのか、お気づきかもしれませんが。

単なるRDBMSではないORDBMS: PostgreSQLはオブジェクトリレーショナルプログラミング言語(ORDBMS)なので、オブジェクト指向プログラミングとリレーショナル/プロシージャルプログラミング(C++のようなもの)の橋渡しをします。これにより、オブジェクトやテーブルの継承を定義することができ、より複雑なデータ構造に変換することができます。ORDBMSは、厳密にはリレーショナルモデルには向かないデータを扱う場合に優れています。

複雑なクエリに最適:検証を必要とするデータを使用しながら、複雑な読み書き操作を行う必要がある場合、PostgreSQLは優れた選択です。しかし、ORDBMSは読み取り専用の操作を行う際に速度が低下する可能性があります(これはMySQLが優れている場合です)。

NoSQLと多種多様なデータ型に対応:PostgreSQLはNoSQL機能において人気の選択肢です。JSON、hstore、XMLなどの豊富なデータ型をネイティブにサポートしています。独自のデータ型を定義したり、カスタム関数を設定することもできます。

超大規模なデータベース管理のために設計されている:PostgreSQLはデータベースのサイズを制限しません。Adjust.comのデータベース管理者によると、彼の会社ではPostgreSQLを使用して「約4PB [ペタバイト]のデータ」を管理しています。これは4,000テラバイトに相当します。さらに彼は、「この環境では、外部からの1秒間に10万~25万件のリクエストを処理(そしてログに記録)している」と主張しています。

マルチバージョン同時実行制御(MVCC):MVCCは、企業がPostgreSQLを選択する最も重要な理由の一つです。MVCCは、異なるリーダとライタが同時にPostgreSQLデータベースと対話して管理することを可能にします。これにより、誰かがデータと対話する必要があるたびに読み書きロックをかける必要がなくなり、効率が向上します。MVCCはこれを「スナップショット分離」(オラクルでそう呼ぶように)によって実現しています。スナップショットは、ある瞬間のデータの状態を表します。

ACIDに準拠:PostgreSQLはデータの破損を防ぎ、トランザクションレベルでのデータの完全性を保持します。PostgreSQLのACID準拠の価値については、こちらを参照してください。(上述したように、MySQLもACID準拠の機能を提供していますが、複雑な問題が発生する可能性があります)。

ユーザーサポート MySQL vs. PostgreSQL

どちらの RDBMS ソリューションにも、DBMS の所有者やサードパーティ・プロバイダからの有料サポート・オプションに加えて、ユーザーへのサポートを提供するための非常に有用なコミュニティがあります。両者の比較は以下の通りです。

MySQLユーザーサポート

オープンソースプロジェクトとして、MySQLには大規模なボランティアコミュニティがあり、無料のサポートや推奨事項を提供しています。この種のサポートを求める最良の方法は、MySQLPercona のウェブサイトにあります。

ここでは、あるITスペシャリストがG2CrowdでのMySQLのカスタマーサポートについて語っています。

私が最も気に入ったのは、MySQLがオープンソース・プロジェクトであること、つまり何千ものサポートやヘルプがインターネット上で無料で利用できることです。これは、特に難しい状況を解決するのに非常に役立っていると感じています。MySQLの良いところは、どんな問題があってもすぐに助けてくれる巨大なコミュニティがあることです。

無料のコミュニティサポートに加えて、Oracle (MySQL の所有者) は、製品の商用版で 24 時間 365 日の有料サポートを提供しており、購入するサポートパッケージのレベルに応じて 2,000 ドルから 10,000 ドルの費用がかかります。また、ここに掲載されている無料のMySQLの書籍、マニュアル、ガイドを参考にして、ご自身でトラブルシューティングを行うこともできます。

PostgreSQLユーザーサポート

MySQLと同様に、PostgreSQLにはIRCや以下のメーリングリストでユーザに無料のアドバイスをするボランティアの大規模なコミュニティがあります。さらに、サードパーティのプロバイダから有償のサポートを購入することもできます。あるいは、ここにある多数のPostgreSQLのマニュアルや書籍に目を通し、自分でトラブルシューティングを行うこともできます。

以下は、あるデータベース管理者がG2Crowd上のPostgreSQLサポートについて述べているものです。

...サポートという点では、フォーラムを通じて助けてくれる人々のコミュニティが一番の味方です。

G2Crowd上の別のレビュアーは以下のように述べています。

私が個人的に経験した一つの欠点は、コミュニティのサポートを得たり、グーグルで結果を求めたりするのが少し難しいということです。しかし、PostgreSQLをより使いこなすようになると、コミュニティのサポートは良くなってきています。

最終的には、(1) DBMSのセットアップと使用にはより多くの技術的な専門知識が必要であり、(2) PostgreSQLの専門家の数はMySQLの専門家よりも少ないため、PostgreSQLのサポートはもう少し難しいかもしれません。

MySQLとPostgesどちらが早い?

MySQLとPostgreSQLはどちらも、利用可能なDBMSソリューションの中で最も高速なものの一つであるという強い評価を得ています。しかし、どちらが速いかについては、その答えは完全には明らかではありません。TechTarget.comのScott Noyes氏によると、どちらか一方に有利なデータベースのベンチマークを見つけるのは簡単です。

ハードウェア、構成、テストによって、あるデータベースを他のデータベースよりも有利にするベンチマークを見つけるのは簡単です。あるデータベースはメモリの少ないシングルコアマシンでもうまくいくかもしれませんし、別のデータベースはマルチコアプロセッサへのスケーリングをより有利に利用できるかもしれません。また、あるデータベースは読み込みで優位に立ち、別のデータベースは書き込みで優位に立つかもしれません。

TechTargetによると、スピードテストでは矛盾する結果が出ていると述べています。例えば、Windows Skills ではMySQLの方が速いとし、BenchwではPostgreSQLの方が速いとしています。最終的には、速度はデータベースの使用方法に依存します。PostgreSQLは、大規模なデータセット、複雑なクエリ、読み書き操作を処理している間は、より高速であることが知られています。一方、MySQLは、読み取り専用のコマンドを使った方が高速であることが知られています。   

どのプログラミング言語をサポートしているか?

MySQL と Postgres は、わずかな違いはあるものの、多くの同じ言語をサポートしています。

MySQLのサポート言語

MySQL は以下の言語をサポートしています。

  • C/C++
  • Delphi
  • Erlang
  • Go
  • Java
  • Lisp
  • Node.js
  • Perl
  • PHP
  • R

PostgreSQLのサポート言語

PostgreSQLでは、やや幅広い言語のサポートを提供しています。

  • C/C++
  • Delphi
  • Erlang
  • Go
  • Java
  • JavaScript
  • Lisp
  • .Net
  • Python
  • R
  • Tcl
  • Other programming languages

Integrate Your Data Today!

Try Xplenty free for 7 days. No credit card required.

OS互換性について

ここでは、MySQLとPostgreSQLのオペレーティングシステムの要件について知っておくべきことについて説明します。

MySQL OS互換性

MySQLはクラウドベースのサポート、オンプレミスでのインストールを提供しており、以下のOSとフォーマットに対応しています。

  • Windows
  • MacOS
  • Linux (Ubuntu, Debian, Generic, SUSE Linux Enterprise Server, Red Hat Enterprises, Oracle)
  • Oracle Solaris
  • Fedora
  • FreeBSD
  • Open Source Build

PostgreSQL OS互換性

PostgreSQLはクラウドベースのサポートとオンプレミスでのインストールを提供しており、ユーザは通常LinuxサーバにPostgreSQLをインストールします。さらに、ORDBMSはPostgREST REST APIを提供しています。PostgreSQLのウェブサイトによると、

PostgRESTは、PostgreSQLデータベースを直接RESTful APIに変換するスタンドアロンのWebサーバーです。データベース内の構造的な制約とパーミッションによってAPIのエンドポイントと操作を決定します。

PostgreSQLは以下のOSに対応しています。

  • MacOS
  • Solaris
  • Windows
  • BSD (FreeBSD, OpenBSD)
  • Linux (Red Hat family Linux including CentOS/Fedora/Scientific/Oracle variants, Debian GNU/Linux and derivatives, Ubuntu Linux and derivatives, SuSE and OpenSuSE, other Linux operating systems)

どのようにインデックスを行うか?

インデックスは、大規模なデータテーブルを扱う際にSQLクエリを高速化することで、データベースのパフォーマンスを向上させます。データベースにインデックスを作成しないと、クエリは遅くなり、DBMSに過度の負荷がかかります。MySQLとPostgreSQLの両方で、異なるインデックスオプションを提供しています。

MySQL インデックスタイプ

MySQL のインデックスタイプには、以下のようなものがあります。

  • INDEX、FULLTEXT、PRIMARY KEY、UNIQUE などの Bツリー に格納されたインデックス。
  • 空間データ型に見られるインデックスなど、Rツリーに格納されたインデックス。
  • FULLTEXTインデックスを使用する場合、ハッシュインデックスおよび転置リスト。

PostgreSQL インデックスタイプ

PostgreSQLのインデックスの種類には以下のものがあります。

  • ハッシュインデックスとB-treeインデックス。
  • テーブルの一部の情報のみを整理する部分インデックス。
  • 列の値ではなく式関数の結果によりインデックスを作成する式インデックス。

コーディングの際に注意すべき違いは?

ここでは、MySQLとPostgreSQLでコーディングする際に注意すべき3つの違いをご紹介します。

  1. 大文字小文字の区別
  2. デフォルトの文字セットと文字列
  3. IF文とIFNULL文とCASE文の比較

Case Sensitivity(大文字小文字を区別するか?)

MySQL は大文字と小文字を区別しません。クエリを書くときに、データベースに表示される文字列を大文字にする必要はありません。PostgreSQLは大文字小文字を区別します。データベースに表示されている文字列を正確に大文字にする必要があります。

デフォルトの文字セットと文字列

MySQLの特定のバージョンでは、文字セットと文字列をUTF-8に変換する必要があります。PostgreSQLでは、文字セットと文字列をUTF-8に変換する必要はありません

IF および IFNULL文 vs. CASE文

MySQLでは、IFとIFNULL文を使っても全く問題ありません。PostgreSQLでは、IF文とIFNULL文は動作しません。代わりにCASE文を使う必要があります。

PostgreSQL vs MySQL Trends

結論

結論から言うと、MySQLとPostgreSQLのどちらを選ぶかは、多くの場合、以下のような質問に集約されます。

  • 複雑なクエリや大規模なデータベースを扱うことができる機能豊富なデータベースが必要か?複雑なクエリや大規模なデータベースを扱うことができる機能豊富なデータベースが必要ですか?PostgesSQLが良いでしょう。
  • 比較的簡単に設定・管理でき、高速で信頼性が高く、ナレッジが普及しているシンプルなデータベースが必要ですか?MySQLが良いでしょう。


しかし、このガイドで見てきたように、あなたの決断は、これらの単純な質問への回答よりも少し繊細なものになるかもしれません。Xplentyでは、あなたが現在使用しているこれらのDBMSソリューションのうち、どのソリューションを使用しているのか、また、なぜ他のソリューションよりもどちらかを選んだのかを知りたいと思っています。是非、ご連絡ください。

Xplenty: MySQLとPostgreSQLのためのデータ統合ソリューション 

MySQLやPostgreSQLからのデータをビジネスインテリジェンスプラットフォームに統合することは、一定の障害や課題の原因になるかもしれません。Xplentyはそういった場面で役に立ちます。Xplentyでは、ほぼすべてのデータソース(MySQL、PostgreSQL、または他のものを使用しているかどうかに関わらず)から情報を抽出するための非常に強力で直感的なETLソリューションを提供し、BIデータウェアハウスとシームレスに統合するため、データを変換します。 Xplentyのオンラインデモを予約して、当社のソリューションがあなたのデータ統合の課題をどのように解決できるかを学びましょう。