| ||||||||||||||||||
| 前のページ 1 2 3 次のページ | ||||||||||||||||||
| SMALLINT、BIGINTにもご用心 | ||||||||||||||||||
同じような問題がSMALLINT、BIGINTでも起こります。たとえば、次のようにテーブルとインデックスを作成したとします。 | ||||||||||||||||||
CREATE TABLE t1(d BIGINT); | ||||||||||||||||||
このとき、次のような検索では作成したインデックスが使われません。 | ||||||||||||||||||
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 | ||||||||||||||||||
図14:インデックスを使った場合 | ||||||||||||||||||
| これをビューにしてみましょう。「aid | ||||||||||||||||||
test=# CREATE VIEW acview AS SELECT DISTINCT ON (bid) bid, aid FROM accounts ORDER BY bid, aid; | ||||||||||||||||||
| 前のページ 1 2 3 次のページ | ||||||||||||||||||
| ||||||||||||||||||
| ||||||||||||||||||
| ||||||||||||||||||

