0
我有一個非常大的數據庫,大小高達2GB左右。 數據庫包含10個表和一個表有60列和行13902134 (vt_owner)VLDB中的查詢優化
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)
執行這個查詢花費了大量的時間!目前使用btree索引。 我想優化這個查詢,並希望得到一些關於如何去做的建議。 使用postgres 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所有的三個B樹索引。 –
需要年齡進行分析.. 「Insert on insurance.uninsured_vehicle(cost = 2.95..855121.64 rows = 6951225 width = 42)」 「 - > Seq Scan on insurance.vt_owner a(cost = 2.95..855121.64 rows = 6951225輸出:a.regn_no,a.chasi_no,a.rto_cd,(a.state_cd)::變化字符(3),a.regn_dt,a.vh_class「 」過濾器:(NOT(散列) SubPlan 1))「 」SubPlan 1「 」 - > Seq Scan on insurance.irda_insurance(cost = 0.00..2.76 rows = 76 width = 11)「 」輸出:irda_insurance.regn_no「 –
與您的EXPLAIN VERBOSE命令查詢.. 成本出來比現有的更高。 尚未在insurance.uninsured_vehicle上使用觸發器。 –