
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
配列でもインデックスを使って検索できます。
CREATE TABLE
test=> CREATE TABLE t (c int[]);
CREATE TABLE
test=> INSERT INTO t SELECT ARRAY[n] FROM generate_series(1, 100000) AS n;
INSERT 0 100000
test=> EXPLAIN SELECT * FROM t WHERE c @> ARRAY[1];
QUERY PLAN
-------------------------------------------------------
Seq Scan on t (cost=0.00..1986.00 rows=100 width=25)
Filter: (c @> '{1}'::integer[])
(2 行)
test=> CREATE INDEX t_c_idx ON t USING gin (c);
CREATE INDEX
test=> ANALYZE t;
ANALYZE
test=> EXPLAIN SELECT * FROM t WHERE c @> ARRAY[1];
QUERY PLAN
------------------------------------------------------------------------
Bitmap Heap Scan on t (cost=5.05..281.52 rows=100 width=25)
Recheck Cond: (c @> '{1}'::integer[])
-> Bitmap Index Scan on t_c_idx (cost=0.00..5.03 rows=100 width=0)
Index Cond: (c @> '{1}'::integer[])
(4 行)
No.2
- 回答日時:
> どのようなマイナス面があるのかご教示いただけないでしょうか。
参照リンク先にもありますが、クライアント側ではこの機能を
ほとんどサポートしていません。
また配列項目にはINDEX作成できないみたいなので、検索が遅く
なる可能性が大きいです。
> 「(顧客番号+訪問日)を主キーして」という点は顧客番号、訪問日の両方を主キーにするという意味でしょうか?
(顧客番号、訪問日)の複合キーで主キーにするという意味です。
create table 顧客訪問
(
顧客番号 int,
訪問日 date,
primary key (顧客番号,訪問日)
);
のようにすれば作成できます。
No.1
- 回答日時:
create table テーブル
(
顧客番号 int primary key,
訪問日 date[]
);
insert into テーブル values ( 1, array[ cast('2010-1-1' as date), cast('2010-5-1' as date), cast('2010-11-1' as date) ]);
insert into テーブル values ( 2, array[ cast('2011-1-1' as date), cast('2011-3-1' as date), cast('2011-6-1' as date) ] );
update テーブル
set 訪問日 = ARRAY_APPEND( 訪問日, cast( '2010-9-1' as date ) )
where 顧客番号=1;
update テーブル
set 訪問日 = ARRAY_APPEND( 訪問日, cast( '2010-7-1' as date ) )
where 顧客番号=1;
https://202.32.10.37/PostgreSQL/Manual/document/ …
https://202.32.10.37/PostgreSQL/Manual/document/ …
出来ますけれど、失うものの方が大きいと思います。
なぜ、
顧客番号
訪問日
で(顧客番号+訪問日)を主キーして、訪問日にINDEXを貼るのではダメですか?
この回答へのお礼
お礼日時:2011/05/06 14:45
回答ありがとうございます。下記の点重ねてご教示願えないでしょうか。
<出来ますけれど、失うものの方が大きいと思います。
どのようなマイナス面があるのかご教示いただけないでしょうか。
<顧客番号
訪問日
で(顧客番号+訪問日)を主キーして、訪問日にINDEXを貼るのではダメですか?
「(顧客番号+訪問日)を主キーして」という点は顧客番号、訪問日の両方を主キーにするという意味でしょうか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLにて指定日付より前、かつ最...
-
SELECT 文の NULL列は?
-
2つのテーブルで引き算 postgres
-
テーブルに存在しない列をselec...
-
MS Access から PostgreSQL へ...
-
PostgreSQLの断片化の状況を確...
-
テーブル定義書作成時のIndex付...
-
SQLでUPSERTを一度に複数行やる...
-
重複を許すキーの構文がわかり...
-
単純なselectが遅くなるのです...
-
COPYコマンドによるTEXT取り込...
-
テーブルにcsvファイルをインポ...
-
投稿記事と関連付けているテー...
-
一つ前に戻るには…
-
Accessのテーブルデータを一気...
-
外部キーだけのテーブル(主キ...
-
会社の飲み会の幹事になり、座...
-
SQL 複数テーブルのupdate
-
sqlplusで表示が変なので、出力...
-
このISAMでは、リンクテーブル・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLにて指定日付より前、かつ最...
-
SQLでUPSERTを一度に複数行やる...
-
PostgreSQLの断片化の状況を確...
-
単純なselectが遅くなるのです...
-
MS Access から PostgreSQL へ...
-
javaでデータベース上のテーブ...
-
2つのテーブルで引き算 postgres
-
Postgresqlのレポート機能について
-
reindex と update のデッドロック
-
Postgresのデータ領域の拡張に...
-
デットロック回避策(autocommit...
-
テーブルにcsvファイルをインポ...
-
PostgreSQL レコードからアイテ...
-
PostgreSQL 8.0.2 の ERROR: r...
-
同一カラムに複数条件指定
-
レコードを1件のみ取得した後...
-
PostgresSQLでテーブル定義の抽...
-
備品管理のデータベースについて
おすすめ情報