Just curious; is there any optimization made in drizzle to handle ON
DUPLICATE KEY UPDATE ? as this is one the feature that many people use
currently; and there is a hit in the performance as the probability of
the duplicates increases...

On Mon, Apr 26, 2010 at 1:11 AM, Roland Bouman <[email protected]> wrote:
> Hi Francesco,
>
> On Mon, Apr 26, 2010 at 12:38 AM, Francesco Riosa
> <[email protected]> wrote:
>>>> 2) for many insert a row is considered to be duplicate even if there are no
>>>> collision with unique indexes (seem to be satisfied by the previous 
>>>> example)
>>>
>>>Well, I think that this is something that MERGE can solve, because you
>>>control the match condition yourself explicitly (in the ON clause).
>>>REPLACE INTO or ON DUPLICATE KEY UPDATE have a more limited matching
>>>condition, that requires one of the unique constraints or primary key
>>>to match.
>>
>> exactly, tough it could be solved for current syntax by the "NO ENFORCE"
>> index property introduced by SQL 2011?
>> first seen in http://petereisentraut.blogspot.com/2010/04/news-from-sql-
>> standard.html
>
> I read the blog - do you mean the part where he mentions new features
> in SQL:2011:
>
> "Constraints can optionally be set to NO ENFORCE.  That means the
> database system won't enforce them but still assumes they are valid,
> for example for optimization."
>
> Remarkable feature. I don't have drafts for the 2011 version of the
> standard, so I can't read up on it, but I am not sure I'm too happy
> with this...
> In as far this is relevant to the matching behaviour, I still think
> the MERGE...ON construct is much more powerful (and clear!) than this.
> (Just my opinion)
>
> kind regarrds.
>
>>
>>>
>>>> to be really useful in these cases the sintax would be something like:
>>>> MERGE INTO table_name USING table_name ON (condition)
>>>> WHEN MATCHED THEN
>>>> *UPDATE SET column1 = value1 [, column2 = value2 ...]*
>>>> WHEN NOT MATCHED THEN
>>>> *INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...*
>>>> ALWAYS SELECT (column1 [, column2 ...])
>>>>
>>>> does it make sense?
>>>
>>>Do you mean, the ALWAYS SELECT would return the matched set as it
>>>looks like after the INSERT/UPDATEs have taken place? (which would
>>>include all values as they are stored in the table, including any
>>>generated values caused by auto_increment columns, column level
>>>defaults, and, in case drizzle would support them, timestamp columns
>>>and triggers)
>>>
>>>If so, then yes, that makes sense to me.
>>
>> Yes the SELECT should return values from the matched row _after_ it has been
>> (eventually) modified or inserted
>>
>>>
>>>
>>>>
>>>>>As we can see merge works like a sub query fashion. and UPDATE and INSERT
>>>>>are part of it (3rd and 5th line).
>>>>>so in effect MERGE statement splits into a SELECT statement (1st line)
>>>>>followed by UPDATE or INSERT.
>>>>
>>>>>Here the advantage is, UPDATE and INSERT are explicit. so no ambiguity
>>>>>remains.
>>>>
>>>>>But this is not the case of REPLACE, need a investigation of the return
>> pair
>>>>>to understand actually what happened inside.
>>>>
>>>>>Am i right?
>>>>
>>>>>Thank you,
>>>>>Jobin.
>>>>
>>>>>On Sun, Apr 25, 2010 at 10:24 PM, Jobin Augustine <[email protected]>
>> wrote:
>>>>
>>>>>> Hi Roland,
>>>>>>
>>>>>> Yes!. MERGE can be used as a replacement for REPLACE. :)
>>>>>> but in practical, it is difficult to write REPLACE using MERGE.
>>>>>> i hope nobody will do that,  just give a try. i bet you will give up :)
>>>>>>
>>>>>> MERGE statement is designed to serve other purposes very efficiently.
>>>>>> where we deal with multiple tables.
>>>>>> For example.
>>>>>>
>>>>>>  1. Warehousing / Reporting systems require "merging" data from
>> normalized
>>>>>> transaction tables into different models
>>>>>>  2. Archiving old data, merge new data into your archive tables very
>>>>>> efficiently.
>>>>>>
>>>>>> I am not against any extra features like REPLACE.
>>>>>> but just conscious about the extra complexity it adds to the code bases
>> and
>>>>>> propages to other plugins (yet to born ones also)
>>>>>> more complexity means more bugs.
>>>>>> referring above proposal, insertRecord returning a pair !
>>>>>>
>>>>>> Thank you,
>>>>>> Jobin.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sun, Apr 25, 2010 at 1:53 PM, Roland Bouman
>>>> <[email protected]>wrote:
>>>>>>
>>>>>>> Actually, after some more reading I now get the impression that MERGE
>>>>>>> INTO does allow for the same flexibility in handling UPDATEs
>>>>>>> differently from the INSERTs, and is in fact even more flexible as it
>>>>>>> allows a separate set to identify the target records.
>>>>>>>
>>>>>>> On Sun, Apr 25, 2010 at 1:14 AM, Roland Bouman <[email protected]>
>>>>>>> wrote:
>>>>>>> > Gah...I replied to Jobin, but forgot to reply to Jay and the list....
>>>>>>> >
>>>>>>> > here goes:
>>>>>>> >
>>>>>>> > Hi Jobin,
>>>>>>> >
>>>>>>> > On Sat, Apr 24, 2010 at 10:20 PM, Jobin Augustine <[email protected]>
>>>>>>> wrote:
>>>>>>> >> is this REPLACE is something so useful?.
>>>>>>> >> are developers are aware and using it to a good extend?
>>>>>>> >
>>>>>>> > In my opinion, it is useful. I don't think there is any statistic on
>>>>>>> > whether developers are making legitimate use of it. But then, this
>>>>>>> > information is also not available for any other SQL feature.
>>>>>>> >
>>>>>>> >> I don't see it in SQL standards and other planets (Postgres,
>>>>>>> Oracle,...)
>>>>>>> >
>>>>>>> > In the SQL standard, the MERGE INTO statement offers similar (although
>>>>>>> > not equivalent) functionality
>>>>>>> >
>>>>>>> > <merge statement> ::=
>>>>>>> >   MERGE INTO <target table> [ [ AS ] <merge correlation name> ]
>>>>>>> >   USING <table reference>
>>>>>>> >   ON <search condition> <merge operation specification>
>>>>>>> >
>>>>>>> > (ISO/IEC 9075-2:2003 (E) 14.9   <merge statement>, page 837)
>>>>>>> >
>>>>>>> > It is similar in that matching existing rows are updated, and if there
>>>>>>> > are no such rows, they will be inserted.
>>>>>>> > Personally I find the standardese particular dense and hard to
>>>>>>> > understand, but this wikipedia entry explains it nicely:
>>>>>>> >
>>>>>>> >
>>>>
>> http://en.wikipedia.org/wiki/Merge_(SQL)<http://en.wikipedia.org/wiki/Merge_%28SQL%29>
>>>>>>> >
>>>>>>> > Personally I like MySQL's REPLACE and ON DUPLICATE KEY constructs
>>>>>>> > better because they don't just merge the data, but allow you a IMO
>>>>>>> > flexible and natural way to handle the updates differently than the
>>>>>>> > inserts. But this is besides your point: the standard offers an
>> "Upsert"
>>>>>>> > construct just like MySQL, but it is called MERGE INTO, and not
>>>>>>> > REPLACE INTO (or INSERT ... ON DUPLICATE KEY UPDATE)
>>>>>>> >
>>>>>>> >> for me, REPLACE is as bad as silent commits (in many planets it
>> happens
>>>>>>> >> before DDL)
>>>>>>> >
>>>>>>> > Ok. Then don't use it :)
>>>>>>> >
>>>>>>> >> all these headache may go if we could discontinue support for
>> mysqlism.
>>>>>>> >
>>>>>>> > That would postpone the problem until drizzle would add
>>>>>>> > support for SQL standard MERGE INTO syntax.
>>>>>>> > In other words, it would need to be solved anyway.
>>>>>>> >
>>>>>>> > kind regards,
>>>>>>> >
>>>>>>> > Roland
>>>>>>> >
>>>>>>> >>
>>>>>>> >> Thank you,
>>>>>>> >> Jobin.
>>>>>>> >>
>>>>>>> >>
>>>>>>> >>
>>>>>>> >> _______________________________________________
>>>>>>> >> Mailing list: https://launchpad.net/~drizzle-
>>>> discuss<https://launchpad.net/%7Edrizzle-discuss>
>>>>>>> >> Post to     : [email protected]
>>>>>>> >> Unsubscribe : https://launchpad.net/~drizzle-
>>>> discuss<https://launchpad.net/%7Edrizzle-discuss>
>>>>>>> >> More help   : https://help.launchpad.net/ListHelp
>>>>>>> >>
>>>>>>> >>
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > --
>>>>>>> > Roland Bouman
>>>>>>> > http://rpbouman.blogspot.com/
>>>>>>> >
>>>>>>> > Author of "Pentaho Solutions: Business Intelligence and Data
>>>>>>> > Warehousing with Pentaho and MySQL",
>>>>>>> > http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470484322.html
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Roland Bouman
>>>>>>> http://rpbouman.blogspot.com/
>>>>>>>
>>>>>>> Author of "Pentaho Solutions: Business Intelligence and Data
>>>>>>> Warehousing with Pentaho and MySQL",
>>>>>>> http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470484322.html
>>
>> Thanks for taking the time to explain/extend better the original explanation
>>
>
>
>
> --
> Roland Bouman
> http://rpbouman.blogspot.com/
>
> Author of "Pentaho Solutions: Business Intelligence and Data
> Warehousing with Pentaho and MySQL",
> http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470484322.html
>
> _______________________________________________
> Mailing list: https://launchpad.net/~drizzle-discuss
> Post to     : [email protected]
> Unsubscribe : https://launchpad.net/~drizzle-discuss
> More help   : https://help.launchpad.net/ListHelp
>

_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to