On Mon, 10 Jan 2005 11:02:38 +0100, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:
>Hvis inddata kommer fra en formular, skal der køres en INSERT-sætning
>for hver post i undertabellen (samt en INSERT-sætning til posten i
>hovedtabellen).
>
>Der er kun to muligheder ved INSERT - enten er kilden en række værdier,
>angivet med VALUES, eller også er kilden en SELECT-forespørgsel.
Hvis der er tale om samme tabel, er der en optional feature:
http://troels.arvin.dk/db/rdbms/#insert-multiple
MySQL og DB2 understøtter den.
I forbindelse med indsættelse af mange rækker ad gangen i MySQL (i
MyISAM-tabeller med table locks) kan den metode virkelig varmt
anbefales. Indsætter man 10.000 rækker er det noget mere
hensigtsmæssigt kun at ha' fx 10 INSERTs à 1.000 rækker, i stedet for
10.000 INSERTs, der hver især resulterer i låsning af tabellen,
opdatering af datafil, opdatering af indexfil og åbning af tabellen
igen. Denne metode kan let reducere det samlede tidsforbrug til under
en tiendedel for en stor mængde INSERTs. At det så også er den eneste
måde i MyISAM at lave en semi-atomisk (hvilket dejligt selvmodsigende
udtryk :) bulk-insert er en anden sag.
Jeg vil dog gætte på, at andre sprog ikke understøtter den, fordi de
lægger op til at folk blot vil bruge en transaktion i stedet for - og
i øvrigt har row-level-locking, så problemet ikke er så stort.
Hvis det blot drejer sig om et par rækker, er det dog næppe relevant.
--
- Peter Brodersen