第7回:オプティマイザに関するチューニング (2/3)

まるごと PostgreSQL!
PostgreSQLチューニング実践テクニック

第7回:オプティマイザに関するチューニング

著者:石井達夫(ISHII, Tatsuo)   2005/6/20
前のページ  1  2   3  次のページ
SMALLINT、BIGINTにもご用心

   同じような問題がSMALLINT、BIGINTでも起こります。たとえば、次のようにテーブルとインデックスを作成したとします。
CREATE TABLE t1(d BIGINT);
CREATE INDEX t1index ON t1(d);

   このとき、次のような検索では作成したインデックスが使われません。

SELECT * FROM t1 WHERE d > 100;

   これは、100が自動的にINTEGER(INT4)に変換されるため、BIGINTと一致しなくなるからです。このような場合は次のようにキャストを利用すればインデックスが使われる可能性があります。

SELECT * FROM t1 WHERE d > 100::INT8;
ビューは万能ではない

   ビューは複雑な問い合わせを単純にしてくれますが、性能上注意すべき問題もあります。次に、例を示します。まずデータを用意します。

$ pgbench -i test

   図14を下から順に見ていきます。まずaccounts_pkeyを使って「aid
test=# EXPLAIN ANALYZE SELECT DISTINCT ON (bid) bid, aid FROM accounts WHERE aid QUERY PLAN
-------------------------------------------------------------------------
 Unique (cost=74.79..79.33 rows=1 width=8) (actual time=4.961..6.264 rows=1 loops=1)
->Sort (cost=74.79..77.06 rows=907 width=8) (actual time=4.959..5.530 rows=999 loops=1)
Sort Key: bid, aid
->Index Scan using accounts_pkey on accounts (cost=0.00..30.24rows=907 width=8) (actual time=0.119..2.860 rows=999 loops=1)
Index Cond: (aid  Total runtime: 6.409 ms
(6 rows)

図14:インデックスを使った場合


   これをビューにしてみましょう。「aid
test=# CREATE VIEW acview AS SELECT DISTINCT ON (bid) bid, aid FROM accounts ORDER BY bid, aid;
前のページ  1  2   3  次のページ


石井達夫
著者プロフィール
石井達夫(ISHII, Tatsuo)
PostgreSQLの開発者、エバンジェリスト。本業でもPostgreSQLによるビジネスに関わっている。著書に「PostgreSQL完全攻略ガイド」「PHPxPostgreSQLで作る最強Webシステム」(技術評論社)などがある。


INDEX
第7回:オプティマイザに関するチューニング
  オプティマイザに関する注意点
SMALLINT、BIGINTにもご用心
  関数を使うほうがよい場合もある
PostgreSQLチューニング実践テクニック
第1回 postgresql.confによるチューニング(1)
第2回 postgresql.confによるチューニング(2)
第3回 VACUUMの活用によるチューニング
第4回 インデックスの活用によるチューニング
第5回 高度なインデックスの活用
第6回 統計情報の最適化
第7回 オプティマイザに関するチューニング
第8回 GROUP BYを使用したチューニング

人気記事トップ10

人気記事ランキングをもっと見る