2016-09-16 47 views
0

所以,有這種情況,當你有一個表,你想在其中插入行對彼此的引用。就像在複式會計中一樣,每件商品都與它的配對相反。有這張表:最快的查詢插入在PSQL中的交叉引用多行對?

CREATE SEQUENCE tbl_item_id_seq 
    START WITH 1 
    INCREMENT BY 1 
    NO MINVALUE 
    NO MAXVALUE 
    CACHE 1; 

CREATE TABLE tbl_item (
    id integer NOT NULL PRIMARY KEY DEFAULT nextval('tbl_item_id_seq'), 
    pair_id integer, 
    label character varying(50) NOT NULL, 
    FOREIGN KEY (pair_id) REFERENCES tbl_item (id) 
); 

ALTER SEQUENCE tbl_item_id_seq OWNED BY tbl_item.id; 

這些項是程序生成的。通常,一次生成多個對,最終目標是將所有對與一個查詢一起插入。我已經用PHP解決了這個問題,我在其中插入了一行,返回了它的id,插入了另一行,填充了pair_id,並更新了第一行和第二行的id。這意味着3分貝查詢從PHP開始,並且由於有多個對生成,這意味着number_of_pairs * 3查詢。當我有大約100對時,它意味着300個查詢,並且在處理時間上給我一個很好的開銷,我想盡量減少。

所以,問題是,什麼是最快的方式來插入對行參考彼此的ID到PSQL單個表中?

回答

0

你可以保留一些IDS:

select nextval('tbl_item_id_seq') from generate_series(1,200) 

然後手動分配ID/pair_id。這樣,插入甚至可以是單個COPY語句(如果您的Postgres驅動程序支持它)。