いちりんのアウトプットブログ

インフラエンジニアです。まだまだ勉強中の身。わからないこと、気になる事を随時調べてアウトプットします。

PostgreSQL is なに?

概要

オープンソース関係データベース管理システム (RDBMS)である。
同じオープンソースRDBMSであるMySQLと比較してなにがいいのかを調べてみる。

それぞれの特徴を一言でまとめると

  • RDBMSに求められるものが過不足なく搭載されているのはPostgreSQL
  • 大規模なシステムでスケールさせる上で性能を限界まで引き出せるのはMySQL

DML(データ操作言語)を比較

  • select文

    • 大量データのソートが必要なSELECT文だとMySQLは遅くなる
    • PostgreSQLと比較するとMySQLはソートのアルゴリズムがそれほど優れていない
    • ただ、新規10件、100件のデータ(TOP n レコード)を取得するようなものは早い
  • update文

    • PostgreSQLはUPDATEする際には変更前の行に削除フラグのようなものを立てたうえで、変更後のデータを持った新しい行を追加している
    • いっぽうでMySQLは、UPDATE対象となる行の値を直接上書きしているのでUPDATEはMySQLの方が早い

テーブル結合(JOIN)

  • MySQLはネステッドループ結合しかサポートしていない。複雑なアルゴリズムはサポートしない思想のため
  • PostgreSQLはネステッドループ結合, ハッシュ結合, ソートマージ結合全てをサポートしている

トランザクション処理の分離レベル

  • MySQLはデフォルトがREPEATABLE-READとなっている
    • ファントムリードを避けるため、ネクスキーロックという仕組みを採用しているがそれが原因でロックがかかりINSERTできなくなる可能性がある
  • PostgreSQLはREAD-COMMITTEDがデフォルト
    • ファントムリードやノンリピータブルが起こる可能性はある
    • REPEATABLE-READに変更したとしてもネストキーロックとは違う方法でファントムリードを防いでいるのでロック競合が起こりづらい

レプリケーションの論理型と物理型

PostgreSQLにしかないもの

  • パラレルクエリがある。処理速度をより速くするために、複数のCPUを活用してクエリを実行するもの
  • サードパーティOSSツールであるPostGISがある点でPostgreSQLが選ばれたりする。MySQLのものより機能が豊富

所感

PostgreSQLについて名前しかわからないぐらいなので調べ他のですが、 そもそもDBというものの仕組みを詳しく知らなかったので、知識不足を実感。 もっと知っていればいい具合に比較できたかと思う。 記事のまとめのようになってしまったが、DBの知識は多くつけられたと思う。

参考記事: PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! - エンジニアHub|若手Webエンジニアのキャリアを考える!

PostgreSQLとMySQLはどちらかに明確な優位性がありますか? - QA@IT