여기 차이 (페이지 9.1.2), 나는 그것이 유물 (스키마, 대소 무의미?)
DROP SCHEMA tmp CASCADE;
CREATE SCHEMA tmp ;
SET search_path=tmp;
CREATE TABLE lutser
(id INTEGER NOT NULL PRIMARY KEY
, val INTEGER NOT NULL
);
INSERT INTO lutser(id,val)
SELECT g, g %31
FROM generate_series(1,100000) g
;
DELETE FROM lutser WHERE random() < .5;
VACUUM ANALYZE lutser;
EXPLAIN ANALYZE
SELECT COUNT(*) FROM lutser
WHERE id >= 1000 AND id < 2000
;
CREATE INDEX lutser_id ON lutser(id);
VACUUM ANALYZE lutser;
EXPLAIN ANALYZE
SELECT COUNT(*) FROM lutser
WHERE id >= 1000 AND id < 2000
;
결과라고 생각합니다 :
는
NOTICE: drop cascades to table tmp.lutser
DROP SCHEMA
CREATE SCHEMA
SET
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "lutser_pkey" for table "lutser"
CREATE TABLE
INSERT 0 100000
DELETE 50051
VACUUM
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=20.28..20.29 rows=1 width=0) (actual time=0.294..0.295 rows=1 loops=1)
-> Index Scan using lutser_pkey on lutser (cost=0.00..19.03 rows=499 width=0) (actual time=0.015..0.216 rows=487 loops=1)
Index Cond: ((id >= 1000) AND (id < 2000))
Total runtime: 0.343 ms
(4 rows)
CREATE INDEX
VACUUM
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=19.03..19.04 rows=1 width=0) (actual time=0.232..0.232 rows=1 loops=1)
-> Index Scan using lutser_id on lutser (cost=0.00..17.79 rows=497 width=0) (actual time=0.033..0.185 rows=487 loops=1)
Index Cond: ((id >= 1000) AND (id < 2000))
Total runtime: 0.266 ms
(4 rows)
어떤 차이 PRIMARY하지 않습니다 안 KEY는 고유 인덱스와 not null 제약 조건으로 구현됩니다. 기본 키가 정의되어 있습니까 (직렬 키가 자동으로 기본 키가 아닌지)? DDL 문을 게시 할 수 있습니까? – Eelke
버전 9가 존재하지 않습니다. 9.0, 9.1 및 9.2의 매우 다른 버전의 PostgreSQL이 있습니다. oid는 버전 8.1 (2005 년 출시)부터 사용되지 않으므로 왜 필요합니까? –
'\ d my_table'의 출력을 psql 프롬프트에 게시하십시오. –