Hi Venu! Nope, AFAIK, none of that code has changed in Drizzle besides some light coding style cleanup.
Cheers, and patches welcome of course ;) jay On Mon, Apr 26, 2010 at 11:15 PM, Venu Kalyan <[email protected]> wrote: > 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 > _______________________________________________ Mailing list: https://launchpad.net/~drizzle-discuss Post to : [email protected] Unsubscribe : https://launchpad.net/~drizzle-discuss More help : https://help.launchpad.net/ListHelp

