lionel napoleon lionelnapol...@yahoo.com [firebird-support] skrev:
I use firebird 2.5.6.I just wanted to know if there is a method by which i can speed an insert query to (insert about 50000 records) into a table.Right now it is taking about 40 minutes.My front end is VBscript and i use a prepared statement.Any help would be
 appreciated.

Hi,

In addition to Helen's advice, if it's still slow, I recommend using an external table. Write the data to a fixed-width format text file, create an external table referencing that file, then insert the records using a insert into....select from statement.

I've found this approach beats any client insert iteration approach by several orders of magnitude.

For example, if you need to insert records with a string, a number and a date, create a text file like this (preferable with a fixed-width character encoding like iso-8859-1 or win1252:

This is some string with trailing space padding   \t0044838\t2016-05-25\r\n
Here's another string                             \t0000545\t2016-01-31\r\n

Save this file as e.g. C:\Dummy.txt and then create external table:

*create table*  "ExDummy"*external file*  'D:\DataDIA\Data\Firebird\Dummy.txt' (
  "TheString"*char*(50)*character set*  win1252,-- Adjust to your max string 
length.
  "Tab1"*char*(1)*character set*  win1252,
  "TheNumber"*char*(7)*character set*  win1252,-- Adjust accoring to your 
required number of digits.
  "Tab2"*char*(1)*character set*  win1252,
  "TheDate"*char*(10)*character set*  win1252,-- Use a date format that 
Firebird can cast from easily.
  "CRLF"*char*(2)*character set*  win1252
);

You can skip the \t separators and even skip line breaks if you wish. In that case, remove them from the external table create statement accordingly.

Next, insert the data into your actual data table:

insert into "MyTable" ("S", "N", "D")
select trim(cast("TheString" as varchar(50))),
  cast("TheNumber" as int),
  cast("TheDate" as date)
from "ExDummy";

You can then drop the external table, or keep it permanently for repeated batch imports. (Note: dropping tables should be done with exclusive database access to avoid risk of corruption).

It is possible to create external file in Firebird-native format rather than text format, but that's so complicated that it's probably not worth the effort.

This method will normally import several thousand records per second, but speed obviously depends on factors that Helen mentioned, e.g. indexes, index tree depth, page size, ...

Regards,
Kjell

--

Marknadsinformation logotyp

Kjell Rilbe
Telefon: 08-761 06 55
Mobil: 0733-44 24 64

Marknadsinformation i Sverige AB
Ulvsundavägen 106C
168 67 Bromma
www.marknadsinformation.se <http://www.marknadsinformation.se>
08-514 905 90

Företagskontakt.se <http://xn--fretagskontakt-vpb.se>
Personkontakt.se <http://personkontakt.se>

  • [firebir... lionel napoleon lionelnapol...@yahoo.com [firebird-support]
    • Re:... Helen Borrie hele...@iinet.net.au [firebird-support]
      • ... lionel napoleon lionelnapol...@yahoo.com [firebird-support]
    • Re:... Kjell Rilbe kjell.ri...@marknadsinformation.se [firebird-support]

Reply via email to