違いを解説君

あるゆる物事の"違い"をわかりやすく解説する情報マガジン

データベース

ITの違い

MySQLとPostgreSQLの違いをわかりやすく解説!使い分け方をチェック

『LAMP』という言葉を聞いたことはありますか?

Linux

Apache

MySQL

PHP

上記4つの頭文字から作られた言葉で、

広く使われている主要なオープンソースのソフトウェア

を表しています。

『MySQL』は、『LAMP』の中の一つであり、世界中で使用されているデータベース・ソフトですね。

同じデータベース・ソフトに『PostgreSQL』があります。

両者には、どんな違いがあるのでしょうか?

 

はなこ
会社の中で、『MySQL』と『PostgreSQL』の両方が使われているの。

おかげで、運用が大変だって、担当者がぼやいていたわ。

ふーん。

2つはそんなに違うものなの?

たろう
はなこ
どうなのかな?

そう言えば、何が違うのかよく知らないのよね。

ちょっと、調べてみましょうか。

 

今回は、『MySQL』と『PostgreSQL』の違いについて解説し、その使い分け方を紹介します。

スポンサーリンク

『MySQL』と『PostgreSQL』の違い

『MySQL』も『PostgreSQL』も、オープンソースの『リレーショナル・データベース』です。

関連記事
データベース
SQLとMySQLの違いをわかりやすく解説!言語とデータベースをチェック

『データベース』を扱ったことはありますか?   はなこ職場で『データベース』を使うことになったの。 『SQL』というのを覚えなきゃならないみたいなんだけど、どんなものなの? 僕も使ったことが ...

続きを見る

 

『MySQL』は、元々は『MySQL』という同名の会社が運営していました。

しかし、2008年に『サン・マイクロシステムズ』に買収され、さらに『サン・マイクロシステムズ』が『Oracle』に買収されたことで、現在では『Oracle』が保有しています。

 

『PostgreSQL』の前身となる『Postgres』は、カリフォルニア大学バークリー校(UCB)で開発されました。

『Postgres』はオープンソースだったため、その後、SQL言語で利用できる形に改造した新しいソフトウェアがリリースされます。

それが、『Postgres95』で、さらに名前を変え、『PostgreSQL』となったわけです。

 

『MySQL』と『PostgreSQL』の主な違いをまとめると、次のようになります。

『MySQL』と『PostgreSQL』の違い

  • 『MySQL』では、DDL操作時にブロックがかからないが、『PostgreSQL』ではブロックがかかる
  • 『MySQL』は、『PostgreSQL』に比べてデータをソートしてselectする場合のパフォーマンスが悪い
  • テーブル結合のアルゴリズムは、『MySQL』はネスティッド・ループのみ、『PostgreSQL』は、それに加えてソートマージとハッシュにも対応している。
  • updateは、『PostgreSQL』よりも『MySQL』のほうが速い

 

それでは、順番に細かく見ていきましょう。

 

DDL操作の違い

『DDL』とは、『データ定義言語(Data Definition Language)』の略語で、表やビュー、インデックスの定義を変更する言語のことです。

例えば、『alter table』は、表を変更するときに使う言語ですね。

『MySQL』では、『DDL』を用いるときもブロックがかかりません。

ブロックとは、表などをロックして他から参照できなくすることです。

『PostgreSQL』の場合、ブロックがかかる

ため、『DDL』操作中は表を参照することもできなくなります。

 

SELECT文の違い

『MySQL』と『PostgreSQL』で、SELECT文での操作のときにパフォーマンスが大きく変わるのが、『order by』によって行をソートする場合です。

『MySQL』のソートのアルゴリズムは、『PostgreSQL』よりも劣っています。

そのためソートした場合、『MySQL』のパフォーマンスは非常に悪くなります。

しかし、『MySQL』は、新規n件のデータ検索といった用途では非常に高速です。

Twitterなどでよくある、最新の記事だけを検索して表示する場合では、『MySQL』のほうがパフォーマンスは良いですね。

 

テーブル結合

テーブルを結合して検索することは、『リレーショナル・データベース』の場合、頻繁に行われます。

 

テーブル結合には、いくつかのアルゴリズムがあります。

ネスティッド・ループ結合

マージソート結合

ハッシュ結合

 

詳細なアルゴリズムについては説明を省きますが、それぞれの特徴としては、

  • 『ネスティッド・ループ結合』は、表の一部分を結合する場合に有効
  • 『マージソート結合』は、表の大部分を結合する場合に有効
  • 『ハッシュ結合』は、結合条件に等価条件(=)が指定され、大量のレコード、または表の大部分を結合する場合に有効

となります。

 

『MySQL』は、『ネスティッド・ループ結合』しかサポートしていません。

ですから、表の大部分を結合したり、大量のレコードを結合する場面ではパフォーマンスが劣化します。

『PostgreSQL』は、3つのアルゴリズムをサポートしています。

ですから、場面に応じて適切なアルゴリズムを選択することが可能です。

 

updateの違い

updateは、『MySQL』のほうが『PostgreSQL』よりも高速です。

『MySQL』では、対象の行にあるデータを文字通り上書きして『更新』します。

しかし、『PostgreSQL』の場合、

新たなレコードをinsertして、古い行をdeleteする

ことで更新処理を行っています。

なので、『PostgreSQL』のほうがパフォーマンスが劣るわけです。

 

『MySQL』と『PostgreSQL』の使い分け方

データサーバー

データサーバー

『MySQL』と『PostgreSQL』は、どのように使い分ければいいでしょうか?

これは難しい話です。

どんな検索や更新処理が多いのか、またスキーマ(表の構成)をどうするかによっても変わります。

 

大雑把な指標としては、

SELECTにソートを多用する場合は『PostgreSQL』。

updateを頻繁に行う場合は『MySQL』。

表の定義変更が多い場合は『MySQL』。

(しかし、表の定義を頻繁に変更するのはあまりよくないですね)

テーブルの結合が多い場合は『PostgreSQL』。

となりますね。

 

それから、『MySQL』も『PostgreSQL』も、お互いに補完しあってバージョンアップを行っていることを視野に入れておきましょう。

今は機能としてなくても、近い将来、実装追加される可能性もあります。

スポンサーリンク

まとめ

今回の違いのポイントについて、まとめていきましょう。

ポイント

  • 『MySQL』では、DDL操作時にブロックがかからないが、『PostgreSQL』ではブロックがかかる
  • 『MySQL』は、『PostgreSQL』に比べて、データをソートしてselectする場合のパフォーマンスが悪い
  • テーブル結合のアルゴリズムは、『MySQL』はネスティッド・ループのみ、『PostgreSQL』は、それに加えて、ソートマージとハッシュにも対応している。
  • updateは、『PostgreSQL』よりも『MySQL』のほうが速い

『MySQL』も『PostgreSQL』も、非常に高機能で、広く使われているため信頼性も高いです。

どちらを選んでも、失敗することはまずないでしょう。

安心して使ってみてくださいね。

関連記事

-ITの違い

Copyright © 違いを解説君 , All Rights Reserved.