On Wed, 2004-12-15 at 11:46 -0600, gerald_clark wrote: > > John McCaskey wrote: > > >I'm currently doing a large number of REPLACE queries, I know that these > >evaluate as if doing a DELETE/INSERT pair, and I'm wondering if this is > >true on a disk io level as well with extra io occuring for the delete, > >and then re-insertion, vs what would occur with an UPDATE. > > > >The way it works roughly each row gets updated around 12-24 times, the > >updated do not affect the primary key, or any of the other keys for that > >matter. The table is INNODB. > > > >So I'm thinking if the row is deleted then re-inserted, there is the > >overhead of one finding the old row and marking it deleted, two > >searching for the correct pos for the row in the table and in the key > >structures, and three writing the row to disk. > > > >Vs, and UPDATE would have the overhead of one finding the old row, and > >two writing the updates to disk. > > > >As such it seems like it actually be faster for me to attempt an UPDATE, > >and if it fails, then do an INSERT, rather than using REPLACE? > > > This provides a window for errors. You can attempt the update, and > before the insert, another process > could insert the record. > And insert followed by an update on failure closes this window. > Thats true, and thanks for pointing it out.
However, in my situation, I am not concerned with this. The tables in question are basically data logging tables, which are updated by a single process which will always serial UPDATE, check if any rows were matched (I'll use the CLIENT_FOUND_ROWS option when connecting), and then INSERT if not. Furthermore, the window for errors could be closed in any situation by fist UPDATE, check if any rows were matched, then REPLACE (rather than insert). This would make the situation where a row did not already exist actually more expensive than before, but because that situation occurs only about 1/24 times for me, it is still much faster overall adding the UPDATE I think. This is assuming that as I stated above the REPLACE query works as described and is truly just a DELETE/INSERT and is not optimized itself to avoid some of the overhead when a row already exists. > > > >Is this correct? > > > > > > > > > > -- John A. McCaskey Software Development Engineer Klir Technologies, Inc. [EMAIL PROTECTED] 206.902.2027 -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]