У меня есть приложение, которому нужно вставить много строк в базу данных, но в данный момент вставка идет слишком медленно, я хочу знать, каковы лучшие методы, чтобы ускорить вставку до максимума.
Ситуация в каждой вставке, мне нужно узнать идентификатор токена, и для этого я поместил SELECT внутри вставки.
Что может быть лучшим решением для максимальной скорости вставки в таблицу textBlockHasToken
, включая SQL и Java?
Редактировать: В данный момент это работает, но у меня большой поток данных. Некоторые числа, 100 000 различных строк в таблице токенов и 2 миллиона строк в textBlockHasToken.
У меня есть три таблицы и два 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 = ?),?,?);