2大OSSデータベースの
MySQLとPostgreSQLの違い
(前半)
第32回 PostgreSQL 勉強会
What is it?
Oracleから移行しようかな…
What is it?
Oracleから移行しようかな…
SQL Serverから移行しようかな…
What is it?
Oracleから移行しようかな…
SQL Serverから移行しようかな…
次の新規案件でOSS使おうかな…
What is it?
でもどのOSSを選べばいいかわからない
What is it?
OSSのRDBと言えば?
What is it?
OSSのRDBと言えば?
↓
MySQLとPostgreSQL
What is it?
こんな人のために
What is it?
こんな人のために
• 2つの違いがよくわかない
What is it?
こんな人のために
• 2つの違いがよくわかない
• 何となく選んだけどこれで良かったの?
What is it?
こんな人のために
• 2つの違いがよくわかない
• 何となく選んだけどこれで良かったの?
• これから利用するにはどちらを選べばいいの?
What is it?
そんな疑問にお答えします!
What is it?
前提条件
MySQL 5.6(InnoDB)
PostgresSQL 9.4
What is it?
前提条件
みんなPostgreSQLはチョットワカル
What is it?
前提条件
みんなPostgreSQLはチョットワカル
↓
PostgreSQLの説明はあまりしません
よくわからない場合は隣の人に聴いてください
あじぇんだ
1 自己紹介
2 アーキテクチャの違い
3 SQLの違い
4 機能の違い
5 まとめ
あじぇんだ
1 自己紹介
2 アーキテクチャの違い
3 SQLの違い
4 機能の違い
5 まとめ
自己紹介
名前:曽根 壮大(そね たけとも)
年齢:30歳(三人の子供がいます)
職業:Webエンジニア
所属:日本PostgreSQLユーザ会
   中国支部 支部長
  技術的にはLL系言語とかRDBが好きです
あじぇんだ
1 自己紹介
2 アーキテクチャの違い
3 SQLの違い
4 機能の違い
5 まとめ
アーキテクチャの違い
項目/DB MySQL PostgreSQL
サーバアーキテクチャ マルチスレッド マルチプロセス
ストレージアーキテクチャ 更新型 追記型
拡張特徴 ストレージエンジン エクステンション
DiscIOアーキテクチャ ラン...
アーキテクチャの違い
項目/DB MySQL PostgreSQL
サーバアーキテクチャ マルチスレッド マルチプロセス
ストレージアーキテクチャ 更新型 追記型
拡張特徴 ストレージエンジン エクステンション
DiscIOアーキテクチャ ラン...
アーキテクチャの違い
サーバアーキテクチャの違い
• 基本的にマルチスレッド(MySQL)の方が有利
• コネクションのコストに差が出る
• クエリの並列処理能力に差が出る
アーキテクチャの違い
サーバアーキテクチャの違い
• 基本的にマルチスレッド(MySQL)の方が有利
• コネクションのコストに差が出る
• クエリの並列処理能力に差が出る
アーキテクチャの違い
サーバアーキテクチャの違い
• 基本的にマルチスレッド(MySQL)の方が有利
• コネクションのコストに差が出る
• クエリの並列処理能力に差が出る
アーキテクチャの違い
サーバアーキテクチャの違い
• 基本的にマルチスレッド(MySQL)の方が有利
• コネクションのコストに差が出る
• クエリの並列処理能力に差が出る
PostgreSQLはコネクションのたびにプロセス生成(fork)が走る
アーキテクチャの違い
サーバアーキテクチャの違い
• 基本的にマルチスレッド(MySQL)の方が有利
• コネクションのコストに差が出る
• クエリの並列処理能力に差が出る
アーキテクチャの違い
サーバアーキテクチャの違い
• 基本的にマルチスレッド(MySQL)の方が有利
• コネクションのコストに差が出る
• クエリの並列処理能力に差が出る
MySQL 5.6は同一スキーマ内ではマルチスレッド処理されない
アーキテクチャの違い
項目/DB MySQL PostgreSQL
サーバアーキテクチャ マルチスレッド マルチプロセス
ストレージアーキテクチャ 更新型 追記型
拡張特徴 ストレージエンジン エクステンション
DiscIOアーキテクチャ ラン...
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
データの一貫性を担保させるための実現方法のこと
SQL...
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
PostgreSQLはMySQLよりもUPDATEは遅...
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
InnoDBもVACUUMみたいなパージ処理が実はある...
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
InnoDBもVACUUMみたいなパージ処理が実はある...
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
VACUUMって何って人は笠原さんの下記のURLをクリ...
アーキテクチャの違い
ストレージアーキテクチャの違い
• MVCCの実現方法の違い
• 更新処理(UPDATEとDELETE)に差が出る
• 追記型だからAutoVACUUMとHOTがある
HOTって何って人は笠原さんのLet s Postgr...
アーキテクチャの違い
内部構造から学ぶPostgreSQL
アーキテクチャの違い
内部構造から学ぶPostgreSQL
PostgreSQLのアーキテクチャをよくわからない人にオススメ
9.3の話なので9.5対応の改訂が待たれる
アーキテクチャの違い
項目/DB MySQL PostgreSQL
サーバアーキテクチャ マルチスレッド マルチプロセス
ストレージアーキテクチャ 更新型 追記型
拡張特徴
ストレージエンジン
プラグイン
FDW
エクステンション
DiscIO...
アーキテクチャの違い
ストレージエンジンとFDWの違い
• ストレージエンジン

handlerレイヤーより上であれば何でも出来る
• FDW

PostgreSQLの外部テーブルのインターフェイス
アーキテクチャの違い
ストレージエンジンとFDWの違い
• ストレージエンジン

handlerレイヤーより上であれば何でも出来る
• FDW

PostgreSQLの外部テーブルのインターフェイス
アーキテクチャの違い
ストレージエンジンとFDWの違い
• ストレージエンジン

handlerレイヤーより上であれば何でも出来る
• FDW

PostgreSQLの外部テーブルのインターフェイス
InnoDB一択なので使う範囲ではあまり気に...
アーキテクチャの違い
ストレージエンジンとFDWの違い
• ストレージエンジン

handlerレイヤーより上であれば何でも出来る
• FDW

PostgreSQLの外部テーブルのインターフェイス
アーキテクチャの違い
ストレージエンジンとFDWの違い
• ストレージエンジン

handlerレイヤーより上であれば何でも出来る
• FDW

PostgreSQLの外部テーブルのインターフェイス
他のDBのテーブルを自分のテーブルのように見...
アーキテクチャの違い
ストレージエンジンとFDWの違い
• ストレージエンジン

handlerレイヤーより上であれば何でも出来る
• FDW

PostgreSQLの外部テーブルのインターフェイス
他のDBのテーブルを自分のテーブルのように見...
アーキテクチャの違い
プラグインとエクステンションの違い
• どちらもCでゴリゴリ書いて作る
• どちらも何でも出来る(RDBの範囲で)
• PostgreSQLの方が作成量が多い

(私の観測範囲で)
アーキテクチャの違い
プラグインとエクステンションの違い
• どちらもCでゴリゴリ書いて作る
• どちらも何でも出来る(RDBの範囲で)
• PostgreSQLの方が作成量が多い

(私の観測範囲で)
アーキテクチャの違い
プラグインとエクステンションの違い
• どちらもCでゴリゴリ書いて作る
• どちらも何でも出来る(RDBの範囲で)
• PostgreSQLの方が作成量が多い

(私の観測範囲で)
アーキテクチャの違い
プラグインとエクステンションの違い
• どちらもCでゴリゴリ書いて作る
• どちらも何でも出来る(RDBの範囲で)
• PostgreSQLの方が作成量が多い

(私の観測範囲で)
アーキテクチャの違い
プラグインとエクステンションの違い
• どちらもCでゴリゴリ書いて作る
• どちらも何でも出来る(RDBの範囲で)
• PostgreSQLの方が作成量が多い

(私の観測範囲で)
MySQLでmroonga(全文検索)は...
アーキテクチャの違い
プラグインとエクステンションの違い
• どちらもCでゴリゴリ書いて作る
• どちらも何でも出来る(RDBの範囲で)
• PostgreSQLの方が作成量が多い

(私の観測範囲で)
PostgreSQLはpg_stat_s...
アーキテクチャの違い
プラグインとエクステンションの違い
• どちらもCでゴリゴリ書いて作る
• どちらも何でも出来る(RDBの範囲で)
• PostgreSQLの方が作成量が多い

(私の観測範囲で)
しかしAWS RDSを使ってたりするとど...
アーキテクチャの違い
項目/DB MySQL PostgreSQL
サーバアーキテクチャ マルチスレッド マルチプロセス
ストレージアーキテクチャ 更新型 追記型
拡張特徴 ストレージエンジン エクステンション
DiscIOアーキテクチャ ラン...
アーキテクチャの違い
DiscIOアーキテクチャの違い
• MySQLはランダムアクセス重視

SSDと相性が良い
• PostgreSQLはシーケンシャルアクセス重視

HDDに特化した仕組み
アーキテクチャの違い
DiscIOアーキテクチャの違い
• MySQLはランダムアクセス重視

SSDと相性が良い
• PostgreSQLはシーケンシャルアクセス重視

HDDに特化した仕組み
アーキテクチャの違い
DiscIOアーキテクチャの違い
• MySQLはランダムアクセス重視

SSDと相性が良い
• PostgreSQLはシーケンシャルアクセス重視

HDDに特化した仕組み
Fusion-IOと特に相性が良い
HDDから代...
アーキテクチャの違い
DiscIOアーキテクチャの違い
• MySQLはランダムアクセス重視

SSDと相性が良い
• PostgreSQLはシーケンシャルアクセス重視

HDDに特化した仕組み
アーキテクチャの違い
DiscIOアーキテクチャの違い
• MySQLはランダムアクセス重視

SSDと相性が良い
• PostgreSQLはシーケンシャルアクセス重視

HDDに特化した仕組み
HDDに合わせるため並べ替えて書込している
SS...
アーキテクチャの違い
アーキテクチャの違いのまとめ
• MySQLの方がスピード重視
• PostgreSQLは機能性と堅牢性重視
• アーキテクチャから既に方向性が明白
アーキテクチャの違い
アーキテクチャの違いのまとめ
• MySQLの方がスピード重視
• PostgreSQLは機能性と堅牢性重視
• アーキテクチャから既に方向性が明白
PostgreSQLは遅いか?というとそうでは無い
HDDでコネクション...
あじぇんだ
1 自己紹介
2 アーキテクチャの違い
3 SQLの違い
4 機能の違い
5 まとめ
SQLの違い
MySQLとPostgreSQLの間に
互換性は無いに等しい
SQLの違い
MySQLは少機能でPostgreSQLが多機能
↓
つまりSQLに関してはMySQL < PostgreSQL
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型の比較が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型の比較が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型の比較が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
通常のSELECT、INSERT、UPDATE、DELETEは問題な...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型の比較が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
通常のSELECT、INSERT、UPDATE、DELETEは問題な...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
ちなみにMySQLはトランザクション中にDDLを流すとcommitが走る
...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
INSERT時に未指定な値を自動補完したりする
(例 datetimeなカ...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
INSERT時に未指定な値を自動補完したりする
(例 datetimeなカ...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
INSERT時に未指定な値を自動補完したりする
(例 datetimeなカ...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
INSERT時に未指定な値を自動補完したりする
(例 datetimeなカ...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
文字列の比較はPostgreSQLは英字の小文字と大文字を区別する
MyS...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
ちなみにMySQLはSJISだとdatetime型にINDEXが効かないの...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
Window関数が無いのでpartition指定の集約はSQLで対応するの...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
サブクエリもPostgreSQLに比べると遅い
それでもMySQL 5.6...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
クエリで頑張らずにアプリケーション側で処理した方が早い場合が多い
(例 ラ...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
ちなみにMySQLのJOINのアルゴリズムはNested Loop Joi...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
ちなみにMySQLのJOINのアルゴリズムはNested Loop Joi...
SQLの違い
MySQLのSQL
• 関数や構文の違いが多い(REPLACE文など)
• 型が緩い(SQLモードで変更は出来る)
• Windows関数など未実装も多い
SQLの違い
PostgreSQLのSQL
• Merge文が無い(9.5でそれ相当の構文が追加)
• ユーザ定義変数が無い
• SQLに関して言えばPostgreSQL > MySQL
SQLの違い
PostgreSQLのSQL
• Merge文が無い(9.5でそれ相当の構文が追加)
• ユーザ定義変数が無い
• SQLに関して言えばPostgreSQL > MySQL
現状でもWITH句+RETURNING句で実現は出来る
...
SQLの違い
PostgreSQLのSQL
• Marge文が無い(9.5でそれ相当の構文が追加)
• ユーザ定義変数が無い
• SQLに関して言えばPostgreSQL > MySQL
現状でもWITH句+RETURNING句で実現は出来る
...
SQLの違い
PostgreSQLのSQL
• Marge文が無い(9.5でそれ相当の構文が追加)
• ユーザ定義変数が無い
• SQLに関して言えばPostgreSQL > MySQL
SQLの違い
PostgreSQLのSQL
• Marge文が無い(9.5でそれ相当の構文が追加)
• ユーザ定義変数が無い
• SQLに関して言えばPostgreSQL > MySQL
Marge文の話も含め、SQLの話は
第九回 中国地方D...
SQLの違い
PostgreSQLのSQL
• Marge文が無い(9.5でそれ相当の構文が追加)
• ユーザ定義変数が無い
• SQLに関して言えばPostgreSQL > MySQL
SQLの違い
PostgreSQLのSQL
• Marge文が無い(9.5でそれ相当の構文が追加)
• ユーザ定義変数が無い
• SQLに関して言えばPostgreSQL > MySQL
同じ感覚でクエリを書くと痛い目にあう
実行計画を見ること...
SQLの違い
SQL逆引き大全363の極意
SQLの違い
SQL逆引き大全363の極意
MySQLとPostgreSQLのINDEXの違いを含めたSQLの書き方がまとまった本
ただし、内容がちょっと古い(2013/6/28の本)
※最新版の改訂まだですか?
SQLの違い
SQL実践入門
SQLの違い
SQL実践入門
PostgreSQLをベースにしたSQLの基礎的な使い方の本
Windows関数やCASEの使い方やサブクエリの使い方の勉強になる
MySQLからPostgreSQLに来た人にオススメ
※しかし原著が古い
WHER...
あじぇんだ
1 自己紹介
2 アーキテクチャの違い
3 SQLの違い
4 機能の違い
5 まとめ
機能の違い
SQLと同様の関係
機能の違い
SQLと同様の関係
↓
MySQL < PostgreSQL
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
1つのテーブルに1トリガー
MySQLのトリガーはFOR EAC...
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
Viewに速度的な限界が来たら中間テーブルを作るしか無い
そもそ...
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
MHA for MySQLがすごい
自動フェイルオーバー
マスタ...
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
pgadmin3とは比較にならないほど優秀
ER図のリバースエン...
機能の違い
MySQLの機能
• ストアドもトリガーも書ける
• マテビューが無い
• レプリケーションは一日の長がある
• GUIツール(MySQL Workbench)が優秀
pgadmin3とは比較にならないほど優秀
ER図のリバースエン...
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
Githubで管理してるので誤字脱字を見つけたらプルリクエスト!
読んで意味が...
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
澤田さんとぬこさんに聞けば大体教えてくれる
あと「篠田の虎の巻」でググると幸せ...
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
澤田さんとぬこさんに聞けば大体教えてくれる
あと「篠田の虎の巻」でググると幸せ...
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
MySQLにはCHECK制約が無い
けどクエリは通る!Why MySQL pe...
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
機能の違い
PostgreSQLの機能
• 日本語ドキュメントを参考
• 豊富な型と専用の検索機能(JSON型など)
• CHECK制約
• INDEXの種類が豊富
MySQL(InnoDB)はB-treeインデックスしか無い
MySQLは1ク...
あじぇんだ
1 自己紹介
2 アーキテクチャの違い
3 SQLの違い
4 機能の違い
5 まとめ
まとめ
MySQLはスピード重視
まとめ
MySQLはスピード重視
↓
シンプルだが機能が少ない
まとめ
PostgreSQLは機能性と堅牢性重視
まとめ
PostgreSQLは機能性と堅牢性重視
↓
高機能だが限界値はMySQLより低い
まとめ
https://twitter.com/soudai1025/status/645429512721707008
まとめ
MySQLのマッチする利用シーン
• 大量の更新や参照が必要な場合
• 単純なクエリを大量に捌く必要がある場合
• レプリケーションやパーテーションを利用
した負荷分散が必要な場合
• サポート(Oracle)をお金で殴りたい場合
まとめ
PostgreSQLのマッチする利用シーン
• 小規模なサービス(スタートアップとか)
• 集計や分析が必要なサービス
• データの整合性が重要なサービス
• 中小企業の業務系サービス
• とりあえずPostgreSQL
まとめ
MySQL
まとめ
MySQL
↓
過去:Webサービス
まとめ
MySQL
↓
過去:Webサービス
↓
現在:トランザクションが必要な大規模案件
まとめ
PostgreSQL
まとめ
PostgreSQL
↓
過去:業務系
まとめ
PostgreSQL
↓
過去:業務系
↓
現在:データの利用と保守が必要な案件
まとめ
Webも業務系も関係ない
まとめ
Webも業務系も関係ない
↓
Webも複雑化&業務系のビックデータ化
まとめ
サービスの種類ではなく
データの利用方法
でRDBを選ぶが良い
まとめ
適材適所で選びましょう
ご静聴ありがとうございました。
Upcoming SlideShare
Loading in...5
×

2大OSSデータベースのMySQLとPostgreSQLの違い(前半)

2,863

Published on

第32回 PostgreSQL 勉強会(2015年10月10日)の資料です

https://www.postgresql.jp/wg/shikumi/pgstudy_32/view

Published in: Data & Analytics
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,863
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

2大OSSデータベースのMySQLとPostgreSQLの違い(前半)

  1. 1. 2大OSSデータベースの MySQLとPostgreSQLの違い (前半) 第32回 PostgreSQL 勉強会
  2. 2. What is it? Oracleから移行しようかな…
  3. 3. What is it? Oracleから移行しようかな… SQL Serverから移行しようかな…
  4. 4. What is it? Oracleから移行しようかな… SQL Serverから移行しようかな… 次の新規案件でOSS使おうかな…
  5. 5. What is it? でもどのOSSを選べばいいかわからない
  6. 6. What is it? OSSのRDBと言えば?
  7. 7. What is it? OSSのRDBと言えば? ↓ MySQLとPostgreSQL
  8. 8. What is it? こんな人のために
  9. 9. What is it? こんな人のために • 2つの違いがよくわかない
  10. 10. What is it? こんな人のために • 2つの違いがよくわかない • 何となく選んだけどこれで良かったの?
  11. 11. What is it? こんな人のために • 2つの違いがよくわかない • 何となく選んだけどこれで良かったの? • これから利用するにはどちらを選べばいいの?
  12. 12. What is it? そんな疑問にお答えします!
  13. 13. What is it? 前提条件 MySQL 5.6(InnoDB) PostgresSQL 9.4
  14. 14. What is it? 前提条件 みんなPostgreSQLはチョットワカル
  15. 15. What is it? 前提条件 みんなPostgreSQLはチョットワカル ↓ PostgreSQLの説明はあまりしません よくわからない場合は隣の人に聴いてください
  16. 16. あじぇんだ 1 自己紹介 2 アーキテクチャの違い 3 SQLの違い 4 機能の違い 5 まとめ
  17. 17. あじぇんだ 1 自己紹介 2 アーキテクチャの違い 3 SQLの違い 4 機能の違い 5 まとめ
  18. 18. 自己紹介 名前:曽根 壮大(そね たけとも) 年齢:30歳(三人の子供がいます) 職業:Webエンジニア 所属:日本PostgreSQLユーザ会    中国支部 支部長   技術的にはLL系言語とかRDBが好きです
  19. 19. あじぇんだ 1 自己紹介 2 アーキテクチャの違い 3 SQLの違い 4 機能の違い 5 まとめ
  20. 20. アーキテクチャの違い 項目/DB MySQL PostgreSQL サーバアーキテクチャ マルチスレッド マルチプロセス ストレージアーキテクチャ 更新型 追記型 拡張特徴 ストレージエンジン エクステンション DiscIOアーキテクチャ ランダム シーケンシャル
  21. 21. アーキテクチャの違い 項目/DB MySQL PostgreSQL サーバアーキテクチャ マルチスレッド マルチプロセス ストレージアーキテクチャ 更新型 追記型 拡張特徴 ストレージエンジン エクステンション DiscIOアーキテクチャ ランダム シーケンシャル
  22. 22. アーキテクチャの違い サーバアーキテクチャの違い • 基本的にマルチスレッド(MySQL)の方が有利 • コネクションのコストに差が出る • クエリの並列処理能力に差が出る
  23. 23. アーキテクチャの違い サーバアーキテクチャの違い • 基本的にマルチスレッド(MySQL)の方が有利 • コネクションのコストに差が出る • クエリの並列処理能力に差が出る
  24. 24. アーキテクチャの違い サーバアーキテクチャの違い • 基本的にマルチスレッド(MySQL)の方が有利 • コネクションのコストに差が出る • クエリの並列処理能力に差が出る
  25. 25. アーキテクチャの違い サーバアーキテクチャの違い • 基本的にマルチスレッド(MySQL)の方が有利 • コネクションのコストに差が出る • クエリの並列処理能力に差が出る PostgreSQLはコネクションのたびにプロセス生成(fork)が走る
  26. 26. アーキテクチャの違い サーバアーキテクチャの違い • 基本的にマルチスレッド(MySQL)の方が有利 • コネクションのコストに差が出る • クエリの並列処理能力に差が出る
  27. 27. アーキテクチャの違い サーバアーキテクチャの違い • 基本的にマルチスレッド(MySQL)の方が有利 • コネクションのコストに差が出る • クエリの並列処理能力に差が出る MySQL 5.6は同一スキーマ内ではマルチスレッド処理されない
  28. 28. アーキテクチャの違い 項目/DB MySQL PostgreSQL サーバアーキテクチャ マルチスレッド マルチプロセス ストレージアーキテクチャ 更新型 追記型 拡張特徴 ストレージエンジン エクステンション DiscIOアーキテクチャ ランダム シーケンシャル
  29. 29. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある
  30. 30. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある
  31. 31. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある データの一貫性を担保させるための実現方法のこと SQL ServerやDB2はロッキングメカニズム
  32. 32. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある
  33. 33. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある PostgreSQLはMySQLよりもUPDATEは遅い(ことが多い しかしFILLFACTORを調整してHOTを効かす事で最適は出来る
  34. 34. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある
  35. 35. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある InnoDBもVACUUMみたいなパージ処理が実はある MySQL 5.6は複数のパージスレッドが並列実行している MySQL 5.5は専用スレッドが処理している とはいってもPostgreSQLのVACUUMよりは圧倒的にローコスト
  36. 36. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある InnoDBもVACUUMみたいなパージ処理が実はある MySQL 5.6は複数のパージスレッドが並列実行している MySQL 5.5は専用スレッドが処理している とはいってもPostgreSQLのVACUUMよりは圧倒的にローコスト PostgreSQLのVACUUMのように気にする必要はほとんど無い
  37. 37. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある VACUUMって何って人は笠原さんの下記のURLをクリック https://dbstudychugoku.github.io/events/event-008.html
  38. 38. アーキテクチャの違い ストレージアーキテクチャの違い • MVCCの実現方法の違い • 更新処理(UPDATEとDELETE)に差が出る • 追記型だからAutoVACUUMとHOTがある HOTって何って人は笠原さんのLet s Postgresの記事をクリック http://lets.postgresql.jp/documents/tutorial/hot3/hot3_1
  39. 39. アーキテクチャの違い 内部構造から学ぶPostgreSQL
  40. 40. アーキテクチャの違い 内部構造から学ぶPostgreSQL PostgreSQLのアーキテクチャをよくわからない人にオススメ 9.3の話なので9.5対応の改訂が待たれる
  41. 41. アーキテクチャの違い 項目/DB MySQL PostgreSQL サーバアーキテクチャ マルチスレッド マルチプロセス ストレージアーキテクチャ 更新型 追記型 拡張特徴 ストレージエンジン プラグイン FDW エクステンション DiscIOアーキテクチャ ランダム シーケンシャル
  42. 42. アーキテクチャの違い ストレージエンジンとFDWの違い • ストレージエンジン
 handlerレイヤーより上であれば何でも出来る • FDW
 PostgreSQLの外部テーブルのインターフェイス
  43. 43. アーキテクチャの違い ストレージエンジンとFDWの違い • ストレージエンジン
 handlerレイヤーより上であれば何でも出来る • FDW
 PostgreSQLの外部テーブルのインターフェイス
  44. 44. アーキテクチャの違い ストレージエンジンとFDWの違い • ストレージエンジン
 handlerレイヤーより上であれば何でも出来る • FDW
 PostgreSQLの外部テーブルのインターフェイス InnoDB一択なので使う範囲ではあまり気にしなくて良い ただしMyISAMがシステムテーブル内にはまだ残っている
  45. 45. アーキテクチャの違い ストレージエンジンとFDWの違い • ストレージエンジン
 handlerレイヤーより上であれば何でも出来る • FDW
 PostgreSQLの外部テーブルのインターフェイス
  46. 46. アーキテクチャの違い ストレージエンジンとFDWの違い • ストレージエンジン
 handlerレイヤーより上であれば何でも出来る • FDW
 PostgreSQLの外部テーブルのインターフェイス 他のDBのテーブルを自分のテーブルのように見る事が出来る 積極的に使う機会が無い
  47. 47. アーキテクチャの違い ストレージエンジンとFDWの違い • ストレージエンジン
 handlerレイヤーより上であれば何でも出来る • FDW
 PostgreSQLの外部テーブルのインターフェイス 他のDBのテーブルを自分のテーブルのように見る事が出来る 積極的に使う機会が無い MyNA・JPUG 合同DB勉強会 in 東京でFDWの発表をしたので 興味がある人はそちらを参考に http://dbstudychugoku.github.io/events/tokyo-001.html
  48. 48. アーキテクチャの違い プラグインとエクステンションの違い • どちらもCでゴリゴリ書いて作る • どちらも何でも出来る(RDBの範囲で) • PostgreSQLの方が作成量が多い
 (私の観測範囲で)
  49. 49. アーキテクチャの違い プラグインとエクステンションの違い • どちらもCでゴリゴリ書いて作る • どちらも何でも出来る(RDBの範囲で) • PostgreSQLの方が作成量が多い
 (私の観測範囲で)
  50. 50. アーキテクチャの違い プラグインとエクステンションの違い • どちらもCでゴリゴリ書いて作る • どちらも何でも出来る(RDBの範囲で) • PostgreSQLの方が作成量が多い
 (私の観測範囲で)
  51. 51. アーキテクチャの違い プラグインとエクステンションの違い • どちらもCでゴリゴリ書いて作る • どちらも何でも出来る(RDBの範囲で) • PostgreSQLの方が作成量が多い
 (私の観測範囲で)
  52. 52. アーキテクチャの違い プラグインとエクステンションの違い • どちらもCでゴリゴリ書いて作る • どちらも何でも出来る(RDBの範囲で) • PostgreSQLの方が作成量が多い
 (私の観測範囲で) MySQLでmroonga(全文検索)は利用される事が多い
  53. 53. アーキテクチャの違い プラグインとエクステンションの違い • どちらもCでゴリゴリ書いて作る • どちらも何でも出来る(RDBの範囲で) • PostgreSQLの方が作成量が多い
 (私の観測範囲で) PostgreSQLはpg_stat_statementsを始め、気軽に使われてる
  54. 54. アーキテクチャの違い プラグインとエクステンションの違い • どちらもCでゴリゴリ書いて作る • どちらも何でも出来る(RDBの範囲で) • PostgreSQLの方が作成量が多い
 (私の観測範囲で) しかしAWS RDSを使ってたりするとどっちのDBも無力 (なので全文検索はCloud Searchに丸投げが多い)
  55. 55. アーキテクチャの違い 項目/DB MySQL PostgreSQL サーバアーキテクチャ マルチスレッド マルチプロセス ストレージアーキテクチャ 更新型 追記型 拡張特徴 ストレージエンジン エクステンション DiscIOアーキテクチャ ランダム シーケンシャル
  56. 56. アーキテクチャの違い DiscIOアーキテクチャの違い • MySQLはランダムアクセス重視
 SSDと相性が良い • PostgreSQLはシーケンシャルアクセス重視
 HDDに特化した仕組み
  57. 57. アーキテクチャの違い DiscIOアーキテクチャの違い • MySQLはランダムアクセス重視
 SSDと相性が良い • PostgreSQLはシーケンシャルアクセス重視
 HDDに特化した仕組み
  58. 58. アーキテクチャの違い DiscIOアーキテクチャの違い • MySQLはランダムアクセス重視
 SSDと相性が良い • PostgreSQLはシーケンシャルアクセス重視
 HDDに特化した仕組み Fusion-IOと特に相性が良い HDDから代えると数十倍のパフォーマンスが出たりする
  59. 59. アーキテクチャの違い DiscIOアーキテクチャの違い • MySQLはランダムアクセス重視
 SSDと相性が良い • PostgreSQLはシーケンシャルアクセス重視
 HDDに特化した仕組み
  60. 60. アーキテクチャの違い DiscIOアーキテクチャの違い • MySQLはランダムアクセス重視
 SSDと相性が良い • PostgreSQLはシーケンシャルアクセス重視
 HDDに特化した仕組み HDDに合わせるため並べ替えて書込している SSDの時はこの並べ替えのオーバーヘッドが大きい なのでSSDにしても何十倍も高速化しない(目安は数倍程度)
  61. 61. アーキテクチャの違い アーキテクチャの違いのまとめ • MySQLの方がスピード重視 • PostgreSQLは機能性と堅牢性重視 • アーキテクチャから既に方向性が明白
  62. 62. アーキテクチャの違い アーキテクチャの違いのまとめ • MySQLの方がスピード重視 • PostgreSQLは機能性と堅牢性重視 • アーキテクチャから既に方向性が明白 PostgreSQLは遅いか?というとそうでは無い HDDでコネクションがPostgreSQL許容範囲の時はMySQLと比較しても早い 特にSELECTに関してはPostgreSQLの方が早いことも多い なので速度を重視してMySQLを選ぶ時は大規模案件
  63. 63. あじぇんだ 1 自己紹介 2 アーキテクチャの違い 3 SQLの違い 4 機能の違い 5 まとめ
  64. 64. SQLの違い MySQLとPostgreSQLの間に 互換性は無いに等しい
  65. 65. SQLの違い MySQLは少機能でPostgreSQLが多機能 ↓ つまりSQLに関してはMySQL < PostgreSQL
  66. 66. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型の比較が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い
  67. 67. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型の比較が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い
  68. 68. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型の比較が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い 通常のSELECT、INSERT、UPDATE、DELETEは問題なし バルクインサートも対応 一般的な関数はあるがPostgreSQLとは名前が違うものも多い 似たような名前でも挙動が違ったりする
  69. 69. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型の比較が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い 通常のSELECT、INSERT、UPDATE、DELETEは問題なし バルクインサートも対応 一般的な関数はあるがPostgreSQLとは名前が違うものも多い 似たような名前でも挙動が違ったりする  例:曜日を取り出す関数 ・MySQL → date_format(time, %w")  0から始まり、日曜日に該当する ・PostgreSQL → to_char(time, D')  1から始まり、日曜日に該当する
  70. 70. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い ちなみにMySQLはトランザクション中にDDLを流すとcommitが走る つまりロールバック出来ない!!
  71. 71. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い
  72. 72. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い INSERT時に未指定な値を自動補完したりする (例 datetimeなカラムにNULL→0000-00-00 00:00:00) GROUP BYのSELECT句に未指定なカラムを指定できる (対象がユニークでない場合は何が出るかはわからないのでバグの温床)
  73. 73. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い INSERT時に未指定な値を自動補完したりする (例 datetimeなカラムにNULL→0000-00-00 00:00:00) GROUP BYのSELECT句に未指定なカラムを指定できる (対象がユニークでない場合は何が出るかはわからないのでバグの温床)そもそもPostgreSQLでは 0000-00-00 00:00:00はエラー (-infinity相当) ちなみにPHPのdatetimeオブジェクトでもエラー
  74. 74. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い INSERT時に未指定な値を自動補完したりする (例 datetimeなカラムにNULL→0000-00-00 00:00:00) GROUP BYのSELECT句に未指定なカラムを指定できる (対象がユニークでない場合は何が出るかはわからないのでバグの温床) SELECT id, age FROM user GROUP BY id 上記のクエリでageに30と31がある場合にどちらが出るかは不明 レコードの状態によって値が変わるのでバグの元によくなる SQLアンチパターンのアンギュアスグループ(曖昧なグループ)として有名
  75. 75. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い INSERT時に未指定な値を自動補完したりする (例 datetimeなカラムにNULL→0000-00-00 00:00:00) GROUP BYのSELECT句に未指定なカラムを指定できる (対象がユニークでない場合は何が出るかはわからないのでバグの温床) SQLモードで上記の問題を解決出来る (厳しい制約に変更出来る) 通称:kamipo TRADITIONAL
  76. 76. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い 文字列の比較はPostgreSQLは英字の小文字と大文字を区別する MySQLは英字の小文字と大文字を区別しない もし区別させたい場合はバイナリ型を利用する またデフォルトの照合順序では「'ハハ' = 'パパ' = 'ババ'」問題が発生する (絵文字も区別しない) utf8mb4_unicode_ciを指定すれば上記の問題は発生しない 逆にPostgreSQLで小文字と大文字を比較しない型は無いので作るしか無い
  77. 77. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い ちなみにMySQLはSJISだとdatetime型にINDEXが効かないのでUTF8一択 型に関する問題はPostgreSQL使いが一番最初にドハマリする罠が多い部分
  78. 78. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い
  79. 79. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い Window関数が無いのでpartition指定の集約はSQLで対応するのは難しい CONNECT BYも無いので設計において親子関係を表現する際は要検討 算術演算子も違いを多いので注意(あんまり使わないけど)
  80. 80. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い サブクエリもPostgreSQLに比べると遅い それでもMySQL 5.6で大分早くなった 相関サブクエリは使わない方が良い (MySQL 5.5以前はサブクエリを投げるとDB固まったりしてた) あとMySQLにはWITH句もRETURNING句無い
  81. 81. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い クエリで頑張らずにアプリケーション側で処理した方が早い場合が多い (例 ランキング表示など) シンプルなクエリで済むような設計力が問われる
  82. 82. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い ちなみにMySQLのJOINのアルゴリズムはNested Loop Joinしかない あとMySQLにはFull Outer JOINも無い 他にもINTERSECTとEXCEPTもない
  83. 83. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い ちなみにMySQLのJOINのアルゴリズムはNested Loop Joinしかない あとMySQLにはFull Outer JOINも無い 他にもINTERSECTとEXCEPTもない SQL力が高い人ほどMySQLで不満が出る 設計がしっかりしていればあまり使わないので問題は少ない
  84. 84. SQLの違い MySQLのSQL • 関数や構文の違いが多い(REPLACE文など) • 型が緩い(SQLモードで変更は出来る) • Windows関数など未実装も多い
  85. 85. SQLの違い PostgreSQLのSQL • Merge文が無い(9.5でそれ相当の構文が追加) • ユーザ定義変数が無い • SQLに関して言えばPostgreSQL > MySQL
  86. 86. SQLの違い PostgreSQLのSQL • Merge文が無い(9.5でそれ相当の構文が追加) • ユーザ定義変数が無い • SQLに関して言えばPostgreSQL > MySQL 現状でもWITH句+RETURNING句で実現は出来る 早く無いので必要ならトリガー書いた方がいいかも
  87. 87. SQLの違い PostgreSQLのSQL • Marge文が無い(9.5でそれ相当の構文が追加) • ユーザ定義変数が無い • SQLに関して言えばPostgreSQL > MySQL 現状でもWITH句+RETURNING句で実現は出来る 早く無いので必要ならトリガー書いた方がいいかも しかしPostgreSQL 9.5で INSERT ON CONFLICT DO NOTHING/UPDATE が出来るので今後はバットノウハウなので覚える必要なし
  88. 88. SQLの違い PostgreSQLのSQL • Marge文が無い(9.5でそれ相当の構文が追加) • ユーザ定義変数が無い • SQLに関して言えばPostgreSQL > MySQL
  89. 89. SQLの違い PostgreSQLのSQL • Marge文が無い(9.5でそれ相当の構文が追加) • ユーザ定義変数が無い • SQLに関して言えばPostgreSQL > MySQL Marge文の話も含め、SQLの話は 第九回 中国地方DB勉強会 in 米子 で話をしたので興味がある人は下記のURLをクリック https://dbstudychugoku.github.io/events/event-009.html
  90. 90. SQLの違い PostgreSQLのSQL • Marge文が無い(9.5でそれ相当の構文が追加) • ユーザ定義変数が無い • SQLに関して言えばPostgreSQL > MySQL
  91. 91. SQLの違い PostgreSQLのSQL • Marge文が無い(9.5でそれ相当の構文が追加) • ユーザ定義変数が無い • SQLに関して言えばPostgreSQL > MySQL 同じ感覚でクエリを書くと痛い目にあう 実行計画を見ることは大事 INDEXの効き方も違うことがある
  92. 92. SQLの違い SQL逆引き大全363の極意
  93. 93. SQLの違い SQL逆引き大全363の極意 MySQLとPostgreSQLのINDEXの違いを含めたSQLの書き方がまとまった本 ただし、内容がちょっと古い(2013/6/28の本) ※最新版の改訂まだですか?
  94. 94. SQLの違い SQL実践入門
  95. 95. SQLの違い SQL実践入門 PostgreSQLをベースにしたSQLの基礎的な使い方の本 Windows関数やCASEの使い方やサブクエリの使い方の勉強になる MySQLからPostgreSQLに来た人にオススメ ※しかし原著が古い WHEREに IS NULLあるとINDEX効かないとか書いてある ちなみにPostgreSQL(8.3以降)もMySQL(5系は確実)もINDEX効きます ちなみにIS NOT NULLも効きます
  96. 96. あじぇんだ 1 自己紹介 2 アーキテクチャの違い 3 SQLの違い 4 機能の違い 5 まとめ
  97. 97. 機能の違い SQLと同様の関係
  98. 98. 機能の違い SQLと同様の関係 ↓ MySQL < PostgreSQL
  99. 99. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀
  100. 100. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀
  101. 101. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀 1つのテーブルに1トリガー MySQLのトリガーはFOR EACH ROWのみをサポート そもそもMySQLでストアドが必要な時は設計を再検討した方がいい
  102. 102. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀
  103. 103. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀 Viewに速度的な限界が来たら中間テーブルを作るしか無い そもそもViewを必要するようなクエリは速度が出ない
  104. 104. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀
  105. 105. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀 MHA for MySQLがすごい 自動フェイルオーバー マスターの無停止メンテナンス可能 PG-REXの凄い版
  106. 106. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀 pgadmin3とは比較にならないほど優秀 ER図のリバースエンジニアリングも可能 マルチプラットフォームで動く(MacもWindowsも可)
  107. 107. 機能の違い MySQLの機能 • ストアドもトリガーも書ける • マテビューが無い • レプリケーションは一日の長がある • GUIツール(MySQL Workbench)が優秀 pgadmin3とは比較にならないほど優秀 ER図のリバースエンジニアリングも可能 マルチプラットフォームで動く(MacもWindowsも可) 次のデモします • UI上でのDDL相当の操作 • リバースエンジニアリング • フォーマッタとVisual Explain

  108. 108. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富
  109. 109. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富
  110. 110. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富 Githubで管理してるので誤字脱字を見つけたらプルリクエスト! 読んで意味がわからない場合はissuesを作る!! https://github.com/pgsql-jp/jpug-doc
  111. 111. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富
  112. 112. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富 澤田さんとぬこさんに聞けば大体教えてくれる あと「篠田の虎の巻」でググると幸せになれる(多分 これに慣れるとPostgreSQLから出れなくなる 最近だとネットワークアドレス型に救われた(IPv6対応)
  113. 113. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富 澤田さんとぬこさんに聞けば大体教えてくれる あと「篠田の虎の巻」でググると幸せになれる(多分 これに慣れるとPostgreSQLから出れなくなる 最近だとネットワークアドレス型に救われた(IPv6対応) 全部解決してくれた • IPv6をインクリメントしたいけどintに出来ない問題 • IPv6でソートするの面倒くさい問題 • IPv6で範囲検索するの大変問題
  114. 114. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富
  115. 115. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富 MySQLにはCHECK制約が無い けどクエリは通る!Why MySQL people!! MySQLはデータを守る仕組みは少ない
  116. 116. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富
  117. 117. 機能の違い PostgreSQLの機能 • 日本語ドキュメントを参考 • 豊富な型と専用の検索機能(JSON型など) • CHECK制約 • INDEXの種類が豊富 MySQL(InnoDB)はB-treeインデックスしか無い MySQLは1クエリで使えるインデックスは一つ MySQLには式インデックスが無い MySQLには部分インデックスも無い
  118. 118. あじぇんだ 1 自己紹介 2 アーキテクチャの違い 3 SQLの違い 4 機能の違い 5 まとめ
  119. 119. まとめ MySQLはスピード重視
  120. 120. まとめ MySQLはスピード重視 ↓ シンプルだが機能が少ない
  121. 121. まとめ PostgreSQLは機能性と堅牢性重視
  122. 122. まとめ PostgreSQLは機能性と堅牢性重視 ↓ 高機能だが限界値はMySQLより低い
  123. 123. まとめ https://twitter.com/soudai1025/status/645429512721707008
  124. 124. まとめ MySQLのマッチする利用シーン • 大量の更新や参照が必要な場合 • 単純なクエリを大量に捌く必要がある場合 • レプリケーションやパーテーションを利用 した負荷分散が必要な場合 • サポート(Oracle)をお金で殴りたい場合
  125. 125. まとめ PostgreSQLのマッチする利用シーン • 小規模なサービス(スタートアップとか) • 集計や分析が必要なサービス • データの整合性が重要なサービス • 中小企業の業務系サービス • とりあえずPostgreSQL
  126. 126. まとめ MySQL
  127. 127. まとめ MySQL ↓ 過去:Webサービス
  128. 128. まとめ MySQL ↓ 過去:Webサービス ↓ 現在:トランザクションが必要な大規模案件
  129. 129. まとめ PostgreSQL
  130. 130. まとめ PostgreSQL ↓ 過去:業務系
  131. 131. まとめ PostgreSQL ↓ 過去:業務系 ↓ 現在:データの利用と保守が必要な案件
  132. 132. まとめ Webも業務系も関係ない
  133. 133. まとめ Webも業務系も関係ない ↓ Webも複雑化&業務系のビックデータ化
  134. 134. まとめ サービスの種類ではなく データの利用方法 でRDBを選ぶが良い
  135. 135. まとめ 適材適所で選びましょう
  136. 136. ご静聴ありがとうございました。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×