in reply to speedup sqlserver insert

Is AutoCommit on? What part of the time is taken by the DELETE?
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Replies are listed 'Best First'.
Re^2: speedup sqlserver insert
by fionbarr (Friar) on Sep 12, 2014 at 13:27 UTC
    I'll check on autocommit...I have just timed the insert; the delete is negligable.

      Have you investigated the bulk load facilities of your server? Most likely, large(r) bulk inserts are done faster by making the server process read from a CSV file.

        what should this look like to turn autocommit off?
        $dbh = DBI->connect("dbi:ODBC:Driver={SQL Server};Server=xxxxx\\yyyy; +UID=$user;PWD=$password, { RaiseError => 1, AutoCommit => 0 } ") or die "\t\t\nCannot +connect to SQLServer... $!";

      I wouldn't bother turning off AutoCommit as it is a global setting and you'll have to call commit everywhere you run any SQL (often even select sql). Just start a transaction with begin_work before the prepare for the insert and commit it at the end of your loop.

      If you do general searches for speedups you'll find loads of other possible speedups. Bulk loading is one someone else already mentioned, DBIs execute_array, disabling indexes on your table until after the insert etc

      UPDATE: Also, what is the point of sorting those hashes - it won't affect what rows are inserted into the database as fas as I can see.