0
저는 매우 큰 데이터베이스를 가지고 있습니다. 크기는 최대 2GB입니다. 데이터베이스는 10 표를 포함하고 테이블 중 하나는이 쿼리를 실행하는 것은 시간이 많이 걸립니다쿼리 최적화
Insert into insurance.uninsured_vehicle
select a.regn_no,a.chasi_no,a.rto_cd,a.state_cd,a.regn_dt,a.vh_class
from insurance.vt_owner a
where a.regn_no not in(select regn_no from insurance.irda_insurance)
60 열과 13902134 행 (vt_owner)가 있습니다! 현재 btree 인덱싱을 사용하고 있습니다. 이 쿼리를 최적화하고 싶습니다.이 쿼리를 수행하는 방법에 대한 제안이 필요했습니다. 포스트 그레스 사용 9.2
나는 테이블을 세로로 분할 한 다음 다양한 파티션에 인덱싱을 적용하기로 결정했습니다.
vt_owner 테이블 정의는
CREATE TABLE insurance.vt_owner
(
regn_no character varying(10) NOT NULL,
regn_dt timestamp without time zone,
purchase_dt timestamp without time zone,
owner_sr numeric(5,0),
owner_name character varying(150),
pan_no character varying(10),
f_name character varying(150),
c_add1 character varying(50),
c_add2 character varying(50),
c_city character varying(50),
c_district character varying(30),
c_pincode character varying(6),
p_add1 character varying(50),
p_add2 character varying(50),
p_city character varying(50),
p_district character varying(30),
p_pincode character varying(6),
owner_cd numeric(5,0),
owner_cd_desc character varying(50),
regn_type character varying(1),
regn_type_desc character varying(50),
vh_class numeric(5,0),
vh_class_desc character varying(50),
chasi_no character varying(30),
eng_no character varying(30),
maker numeric(5,0),
maker_desc character varying(50),
maker_model character varying(50),
body_type character varying(3),
body_type_desc character varying(50),
no_cyl numeric(2,0),
hp character varying(10),
seat_cap numeric(3,0),
stand_cap numeric(3,0),
sleeper_cap numeric(2,0),
unld_wt numeric(9,0),
ld_wt numeric(9,0),
fuel numeric(3,0),
fuel_desc character varying(50),
color character varying(50),
manu_mon numeric(2,0),
manu_yr numeric(4,0),
fit_dt timestamp without time zone,
norms numeric(2,0),
norms_desc character varying(50),
wheelbase character varying(10),
cubic_cap character varying(10),
floor_area numeric(7,3),
ac_fiitted character(1),
audio_fiitted character(1),
video_fiitted character(1),
vch_purchase_as character(1),
vch_catg character(3),
dealer_cd numeric(5,0),
dealer_cd_desc character varying(50),
sale_amt numeric(9,0),
laser_code character varying(10),
garage_add character varying(50),
state_cd character varying(2) NOT NULL,
rto_cd character varying(3) NOT NULL,
CONSTRAINT vt_owner_pkey PRIMARY KEY (state_cd, rto_cd, regn_no)
)
WITH (
OIDS=FALSE
);
ALTER TABLE insurance.vt_owner
OWNER TO postgres;
-- Index: insurance."index_VT_OWNER"
-- DROP INDEX insurance."index_VT_OWNER";
CREATE INDEX "index_VT_OWNER"
ON insurance.vt_owner
USING btree
(regn_no COLLATE pg_catalog."default", chasi_no COLLATE pg_catalog."default", state_cd COLLATE pg_catalog."default", rto_cd COLLATE pg_catalog."default");
나는 또한 괘를 만드는 생각했다. 제발 좀 도와주세요.
보험은 스키마 .. vt_owner, irda_insurance이며, 모든 세 uninsured_vehicle BTREE 인덱싱됩니다. –
분석 할 나이를 취합니다. "보험에 가입하십시오. 보험에 가입하지 않은 차량 (비용 = 2.95..855121.64 행 = 6951225 너비 = 42)" "-> Seq가 insurance.vt_owner a에서 스캔합니다 (비용 = 2.95..855121.64 행 = 6951225 width : 42) " "출력 : a.regn_no, a.chasi_no, a.rto_cd (a.state_cd) :: 문자 변경 (3), a.regn_dt, a.vh_class " "필터 : (NOT (해쉬 된 (비용 = 0.00..2.76 행 = 76 너비 = 11) " "서브 Pllan 1 " "-> Seq는 insurance.irda_insurance를 스캔합니다. (비용 = 0.00..2.76 행 = 76 너비 = 11) " "출력 : irda_insurance.regn_no " –
EXPLAIN VERBOSE 명령을 사용합니다. 쿼리 .. 비용이 기존 것보다 높아집니다. insurance.uninsured_vehicle에서 트리거가 사용되었습니다. –