Szybszy sposób wstawiania za pomocą skryptu do Oracle?
Pracuję z aplikacją C # .NET 4.0, która używa ODP.NET 11.2.0.2.0 z bazą danych Oracle 11g. Aplikacja ładuje wstępnie kilka tabel z danymi, a ponieważ większość z nich ma mniej niż 20 rekordów, skrypty działają dość szybko. Jednak jeden ze skryptów ma 802 rekordów, a wstawienie rekordów zajmuje 248,671 sekundy, co wydaje się nadmierne w przypadku tak małej ilości danych z bazą danych, która reklamuje szybkie operacje przy dużych ilościach danych.
Zastanawiam się, czy istnieje szybszy sposób wstawiania danych za pomocą skryptu niż obecny sposób pisania skryptu?
Wstawiana tabela jest zdefiniowana w ten sposób:
CREATE TABLE FileIds
(
Id NUMERIC(38) NOT NULL
,Name NVARCHAR2(50) DEFAULT 'Unknown' NOT NULL
,FileTypeGroupId NUMERIC(38) NOT NULL
,CONSTRAINT FK_FileIds_FileTypeGroups FOREIGN KEY ( FileTypeGroupId ) REFERENCES FileTypeGroups ( Id )
)
A skrypt do wstawienia wygląda następująco:
BEGIN
INSERT ALL
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1152,5)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1197,10)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1200,6)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1143,3)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1189,9)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1109,7)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1166,4)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (0,8)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1149,2)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1400,1)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1330,11)
INTO FileIds ( Id, FileTypeGroupId ) VALUES (1000,0)
-- 790 Records removed for example purposes.
SELECT * FROM DUAL;
COMMIT;
END;
Tabela FileTypeGroups, do której odwołuje się klucz obcy, jest wstępnie załadowana przed załadowaniem tabeli FileIds. Nie ma sekwencji ani wyzwalaczy związanych z tabelą FileIds, a jak dotąd nie utworzono indeksów dla tabeli.