【发布时间】:2011-11-01 06:57:09
【问题描述】:
我有一个应用程序需要在数据库中插入很多行,但是目前插入速度太慢,我想知道什么是最好的技术来加快插入速度。
情况是在每次插入时,我需要发现令牌的 id,为此,我将 SELECT 放入插入中。
在包括 SQL 和 Java 在内的textBlockHasToken 表中最大程度地加快插入速度的最佳解决方案是什么?
编辑:目前可以使用,但我的数据流很大。一些数字,令牌表中有 100.000 行不同的行,textBlockHasToken 中有 200 万行。
我有这三个表和两个插入 SQL:
-- Text blocks of the pages
CREATE TABLE textBlock(
id INTEGER PRIMARY KEY,
pageId INTEGER REFERENCES page,
text VARCHAR NOT NULL,
position INTEGER NOT NULL
);
-- Tokens in the text blocks
CREATE TABLE token(
id INTEGER PRIMARY KEY,
text VARCHAR NOT NULL,
charType VARCHAR NOT NULL,
grammar VARCHAR NOT NULL,
category VARCHAR[] NOT NULL,
stopWord BOOLEAN NOT NULL DEFAULT false,
UNIQUE(text)
);
-- N:N relationship between textblock and token
CREATE TABLE textBlockHasToken(
textBlockId INTEGER REFERENCES textBlock NOT NULL,
tokenId INTEGER REFERENCES token NOT NULL,
sentence INTEGER NOT NULL,
position INTEGER NOT NULL
);
-- Insert the token
INSERT INTO token(id,text,charType,grammar,category)
VALUES(nextval('tokenIdSqc'),?,?,?,?);
-- Insert in relationship in N:M
INSERT INTO textBlockHasToken(textblockId,tokenId,sentence,position)
VALUES(?,(SELECT id FROM token WHERE text = ?),?,?);
【问题讨论】:
标签: java sql postgresql