SlideShare une entreprise Scribd logo
1  sur  26
PostgreSQL チューニング ~SQL編~ id:matsuou1
目標 ,[object Object],[object Object],[object Object]
実行計画とは? ,[object Object],[object Object],testdb=# explain select count(id) from master where valid = true; QUERY PLAN ---------------------------------------------------------------------------- Aggregate  (cost=217107.05..217107.06 rows=1 width=0) ->  Seq Scan on master  (cost=0.00..213742.88 rows=1345668 width=0) Filter: valid
ExplainとExplain analyzeの違い ,[object Object],[object Object],[object Object],[object Object],testdb=# explain analyze select count(id) from master where valid = true; QUERY PLAN ------------------------------------------------------------------------------------------------------------ Aggregate  (cost=217107.05..217107.06 rows=1 width=0)          (actual time=2956.265..2956.265 rows=1 loops=1) ->  Seq Scan on master  (cost=0.00..213742.88 rows=1345668 width=0)                    (actual time=0.035..2661.190 rows=1374280 loops=1) Filter: valid Total runtime: 2956.301 ms
実行計画の読み方① ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Aggregate  (cost=217107.05..217107.06 rows=1 width=0) ->  Seq Scan on master  (cost=0.00..213742.88 rows=1345668 width=0) Filter: valid
実行計画の読み方② ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Aggregate  (cost=217107.05..217107.06 rows=1 width=0) ->  Seq Scan on master  (cost=0.00..213742.88 rows=1345668 width=0) Filter: valid
実行計画の読み方③ ,[object Object],[object Object],testdb=# explain select * from place_master p , member m  testdb=# where p.pid = 5 and p.pid = m.pid order by m.id limit 10; QUERY PLAN ----------------------------------------------------------------------------------------- Limit  (cost=517.11..517.13 rows=10 width=638) ->  Sort  (cost=517.11..517.74 rows=252 width=638) Sort Key: f.fid ->  Nested Loop  (cost=0.00..511.66 rows=252 width=638) ->  Index Scan using place_master_pid on place_master p  (cost=0.00..4.41 rows=1 width=599) Index Cond: (pid = 5) ->  Index Scan using member_pid on member m  (cost=0.00..504.73 rows=252 width=39) Index Cond: (m.pid = 5) ① ② ③ ④ ⑤
実行計画の読み方④ - 1 データ取得 なし リレーション内のビットマップをメモリ内で作成し、スキャンする Bitmap Index Scan なし インデックスを使用してスキャン 大きいテーブルでは SeqScan より早い Index Scan なし 最初から最後のページまでスキャン 条件によらず全ての行をチェック 大きいテーブルだと遅い Seq Scan 開始コスト 説明 演算子
実行計画の読み方④ - 2 テーブル結合 あり 2つのデータセットを結合 データセットはあらかじめソートが必要 Merge Join あり 一方の入力からハッシュテーブルを作成し、二つの入力を比較する INNER JOIN と OUTER JOIN と同時に使用される Hash Join なし 2 つのテーブルを結合 INNER JOIN と LEFT OUTER JOIN 外部テーブルをスキャンし、内部テーブルにマッチするものを取得 インデックスが無い場合は遅いかも Nested Loop 開始コスト 説明 演算子
実行計画の読み方④ - 3 その他 あり Count 、 sum 、 max 等の集合関数 Aggregate あり Row は指定した行数 Offset を追加すると、少しだけ開始コストが必要になる Limit あり 取得したデータのソート処理 Sort 開始コスト 説明 演算子
遅いSQLを特定するには? ,[object Object],[object Object],[object Object],[object Object]
遅いSQLの特定方法① ,[object Object],SELECT pid, start, now() - start AS lap, current_query FROM (SELECT backendid, pg_stat_get_backend_pid(S.backendid) AS pid, pg_stat_get_backend_activity_start(S.backendid) AS start, pg_stat_get_backend_activity(S.backendid) AS current_query FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS S ) AS S WHERE current_query <> '<IDLE>' ORDER BY lap DESC; pid  |  start  |  lap  | current_query -------+------------------------+------------------+---------------------------------------- 16867 | 2008-12-24 16:49:54.00 | -00:00:02.000238 | SELECT * FROM master  WHERE id = $1 AND valid = true  LIMIT 1
遅いSQLの特定方法② ,[object Object],[object Object],[object Object],2008-09-01 00:00:54 JST  LOG:  duration: 11098.465 ms  statement: SELECT count(id) FROM master
SQLチューニングのポイント ,[object Object],[object Object],[object Object],[object Object]
直積結合の回避 ,[object Object],[object Object],tableA = 1000 件、  tableB = 2 万件 の直積結合 1,000 * 20,000 = 20,000,000 2000 万件処理されてしまう が、結果が正しいと気付かない事も。 データ量が増加すれば、致命的な性能劣化に
直積結合の回避 ,[object Object],[object Object],[object Object],結合条件が漏れてないか、 SQL に無理がないか要確認
インデックスを使う ,[object Object],[object Object],インデックスを使用しないと、 テーブルサイズに比例して性能が劣化
インデックスを使う ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],WHERE SUBSTR(COL1, 1, 1) = ‘A’  ( 左辺に関数を使用 ) WHERE COL1 * 1.05 > 5000 ( 左辺に計算式を使用 ) WHERE COL1 != 10000 (NOT EQUAL を使用 ) WHERE COL1 LIKE ‘%hoge%’ ( 中間一致検索を使用 )
テーブルの結合数制限 ,[object Object],[object Object],[object Object],8! = 40,320 7! = 5,040 6! = 720 5! = 120 4! = 24 3! = 6 最適な実行計画を立てるのに時間がかかる
JOINのテーブル数制限 ,[object Object],[object Object],[object Object],1 SQL で JOIN する表数は最大で 6 までに抑える
ソート処理の削減 ,[object Object],データ件数が増えてくると、 ソート処理も高コストになる
ソート処理の削減 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
空気が読める開発者になるために ,[object Object],[object Object],[object Object],[object Object]
[object Object],もうちょっとだけ続くんじゃ
SQLチューニング 都市伝説① ,[object Object],[object Object],8.3からインデックス使用可能に! testdb=# explain select count(id) from master where mail is null; QUERY PLAN ------------------------------------------------------------------------------------------ Aggregate  (cost=4.90..4.91 rows=1 width=4) ->  Index Scan using master_mail on master  (cost=0.00..4.90 rows=1 width=4) Index Cond: (mail IS NULL)
SQLチューニング 都市伝説② ,[object Object],testdb=# explain select uid from master where id = '1' or uid = '5' or uid = '10'; QUERY PLAN ------------------------------------------------------------------------------------- Bitmap Heap Scan on master  (cost=7.64..13.68 rows=3 width=4) Recheck Cond: ((id = 1) OR (id = 5) OR (id = 10)) ->  BitmapOr  (cost=7.64..7.64 rows=3 width=0) ->  Bitmap Index Scan on master_pkey  (cost=0.00..2.54 rows=1 width=0) Index Cond: (id = 1) ->  Bitmap Index Scan on master_pkey  (cost=0.00..2.54 rows=1 width=0) Index Cond: (id = 5) ->  Bitmap Index Scan on master_pkey  (cost=0.00..2.54 rows=1 width=0) Index Cond: (id = 10) testdb=# explain select uid from master where id in ('1' , '5' , '10'); QUERY PLAN ------------------------------------------------------------------------------- Bitmap Heap Scan on master  (cost=7.06..13.09 rows=3 width=4) Recheck Cond: (uid = ANY ('{1,5,10}'::integer[])) ->  Bitmap Index Scan on master_pkey  (cost=0.00..7.06 rows=3 width=0) Index Cond: (id = ANY ('{1,5,10}'::integer[]))

Contenu connexe

Tendances

Tendances (20)

pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
より深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニングより深く知るオプティマイザとそのチューニング
より深く知るオプティマイザとそのチューニング
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみpg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)
 
pg_bigmと類似度検索
pg_bigmと類似度検索pg_bigmと類似度検索
pg_bigmと類似度検索
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画2019年度 若手技術者向け講座 実行計画
2019年度 若手技術者向け講座 実行計画
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
PostgreSQL運用管理入門
PostgreSQL運用管理入門PostgreSQL運用管理入門
PostgreSQL運用管理入門
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうPostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
pg_trgmと全文検索
pg_trgmと全文検索pg_trgmと全文検索
pg_trgmと全文検索
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)pg_bigmを用いた全文検索のしくみ(後編)
pg_bigmを用いた全文検索のしくみ(後編)
 

En vedette

[B14] PostgreSQLのサポート業務でわかった設計・運用のハマりどころ by Takahiro sugiyama
[B14] PostgreSQLのサポート業務でわかった設計・運用のハマりどころ by Takahiro sugiyama[B14] PostgreSQLのサポート業務でわかった設計・運用のハマりどころ by Takahiro sugiyama
[B14] PostgreSQLのサポート業務でわかった設計・運用のハマりどころ by Takahiro sugiyama
Insight Technology, Inc.
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
Tomoaki Uchida
 
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisëHisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Libra Islame
 
Describe
DescribeDescribe
Describe
silmb
 

En vedette (20)

PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan使ってみませんか?pg hint_plan
使ってみませんか?pg hint_plan
 
[B14] PostgreSQLのサポート業務でわかった設計・運用のハマりどころ by Takahiro sugiyama
[B14] PostgreSQLのサポート業務でわかった設計・運用のハマりどころ by Takahiro sugiyama[B14] PostgreSQLのサポート業務でわかった設計・運用のハマりどころ by Takahiro sugiyama
[B14] PostgreSQLのサポート業務でわかった設計・運用のハマりどころ by Takahiro sugiyama
 
使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan使ってみませんか?pg_hint_plan
使ってみませんか?pg_hint_plan
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
 
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
 
Nvidia GTC 2014 Talk
Nvidia GTC 2014 TalkNvidia GTC 2014 Talk
Nvidia GTC 2014 Talk
 
جای خالی مدیر ارشد برند در شرکت های ایرانی
جای خالی مدیر ارشد برند در شرکت های ایرانیجای خالی مدیر ارشد برند در شرکت های ایرانی
جای خالی مدیر ارشد برند در شرکت های ایرانی
 
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisëHisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
 
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙
 
ΒΑΚΑΛΟΥΔΗ - ΠΡΟΣΚΛΗΣΗ
ΒΑΚΑΛΟΥΔΗ - ΠΡΟΣΚΛΗΣΗΒΑΚΑΛΟΥΔΗ - ΠΡΟΣΚΛΗΣΗ
ΒΑΚΑΛΟΥΔΗ - ΠΡΟΣΚΛΗΣΗ
 
Tesla Croatia
Tesla CroatiaTesla Croatia
Tesla Croatia
 
Digital Marketing
Digital MarketingDigital Marketing
Digital Marketing
 
Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...
Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...
Gianni Marconato - Costruire conoscenza professionale in rete attraverso la n...
 
Describe
DescribeDescribe
Describe
 
Međuinduktivitet i zračni transformatori
Međuinduktivitet i zračni transformatoriMeđuinduktivitet i zračni transformatori
Međuinduktivitet i zračni transformatori
 
Tutorial for the ReportLinker App
Tutorial for the ReportLinker AppTutorial for the ReportLinker App
Tutorial for the ReportLinker App
 

Similaire à 20090107 Postgre Sqlチューニング(Sql編)

HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
Kensuke Nagae
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
akirahiguchi
 

Similaire à 20090107 Postgre Sqlチューニング(Sql編) (20)

Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
20190119 aws-study-pg-extension
20190119 aws-study-pg-extension20190119 aws-study-pg-extension
20190119 aws-study-pg-extension
 
Jpug study-pq 20170121
Jpug study-pq 20170121Jpug study-pq 20170121
Jpug study-pq 20170121
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)
 
MySQL SQL tuning
MySQL SQL tuningMySQL SQL tuning
MySQL SQL tuning
 
generate_series関数使い込み
generate_series関数使い込みgenerate_series関数使い込み
generate_series関数使い込み
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
 
Vertica 7.2.2 新機能
Vertica 7.2.2 新機能Vertica 7.2.2 新機能
Vertica 7.2.2 新機能
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
DBパフォーマンス・チューニング
DBパフォーマンス・チューニングDBパフォーマンス・チューニング
DBパフォーマンス・チューニング
 
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
Linux 対応だけじゃない!! sql server 2017 こんな機能が追加されています。
 
Chugokudb18_2
Chugokudb18_2Chugokudb18_2
Chugokudb18_2
 

Plus de Hiromu Shioya

クマとジャーニーマンとステマ
クマとジャーニーマンとステマクマとジャーニーマンとステマ
クマとジャーニーマンとステマ
Hiromu Shioya
 

Plus de Hiromu Shioya (20)

不惑の生存戦略
不惑の生存戦略不惑の生存戦略
不惑の生存戦略
 
勉強会なう
勉強会なう勉強会なう
勉強会なう
 
LTの技術
LTの技術LTの技術
LTの技術
 
珍獣 素人 そして くのいち
珍獣 素人 そして くのいち珍獣 素人 そして くのいち
珍獣 素人 そして くのいち
 
夏夏
 
Tupperware
TupperwareTupperware
Tupperware
 
Rubyistが歩むべき道への道
Rubyistが歩むべき道への道Rubyistが歩むべき道への道
Rubyistが歩むべき道への道
 
自宅で本気を出さされた
自宅で本気を出さされた自宅で本気を出さされた
自宅で本気を出さされた
 
クマとデバッグを
クマとデバッグをクマとデバッグを
クマとデバッグを
 
クマとジャーニーマンとステマ
クマとジャーニーマンとステマクマとジャーニーマンとステマ
クマとジャーニーマンとステマ
 
お前の本気を見せてみろ!
お前の本気を見せてみろ!お前の本気を見せてみろ!
お前の本気を見せてみろ!
 
Git道場を開催してきた
Git道場を開催してきたGit道場を開催してきた
Git道場を開催してきた
 
三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイル三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイル
 
俺たちの目指すモバイルの新たな地平
俺たちの目指すモバイルの新たな地平俺たちの目指すモバイルの新たな地平
俺たちの目指すモバイルの新たな地平
 
2011年の漢字
2011年の漢字2011年の漢字
2011年の漢字
 
ベジェ曲線を書いてみた
ベジェ曲線を書いてみたベジェ曲線を書いてみた
ベジェ曲線を書いてみた
 
オススメの技術書
オススメの技術書オススメの技術書
オススメの技術書
 
はじめて学ぶバージョン管理とGit
はじめて学ぶバージョン管理とGitはじめて学ぶバージョン管理とGit
はじめて学ぶバージョン管理とGit
 
肉とRubyとわたし
肉とRubyとわたし肉とRubyとわたし
肉とRubyとわたし
 
祝辞
祝辞祝辞
祝辞
 

20090107 Postgre Sqlチューニング(Sql編)

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. 実行計画の読み方④ - 1 データ取得 なし リレーション内のビットマップをメモリ内で作成し、スキャンする Bitmap Index Scan なし インデックスを使用してスキャン 大きいテーブルでは SeqScan より早い Index Scan なし 最初から最後のページまでスキャン 条件によらず全ての行をチェック 大きいテーブルだと遅い Seq Scan 開始コスト 説明 演算子
  • 9. 実行計画の読み方④ - 2 テーブル結合 あり 2つのデータセットを結合 データセットはあらかじめソートが必要 Merge Join あり 一方の入力からハッシュテーブルを作成し、二つの入力を比較する INNER JOIN と OUTER JOIN と同時に使用される Hash Join なし 2 つのテーブルを結合 INNER JOIN と LEFT OUTER JOIN 外部テーブルをスキャンし、内部テーブルにマッチするものを取得 インデックスが無い場合は遅いかも Nested Loop 開始コスト 説明 演算子
  • 10. 実行計画の読み方④ - 3 その他 あり Count 、 sum 、 max 等の集合関数 Aggregate あり Row は指定した行数 Offset を追加すると、少しだけ開始コストが必要になる Limit あり 取得したデータのソート処理 Sort 開始コスト 説明 演算子
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.