First create a table with the "fixed" domain names:

CREATE TABLE FixedDomains
SELECT DISTINCT domain, left( domain, instr( domain, '.'> ) -1 ) as 
newdomain
FROM url_cat

Index your new table (for speed):

ALTER FixedDomains ADD INDEX (Domain)

*** NOTE: You really want to review (and modify, if necessary) the data in 
FixedDomains _before_ you do the next step. Make sure that the newdomain 
column has the correct extract for the value in the domain column. ***

Now you can mass-update your data:

UPDATE url_cat u
INNER JOIN FixedDomains fd
        ON fd.domain = u.domain
SET u.domain = fd.newdomain

You can then  "DROP TABLE FixedDomains" whenever you are through using it.

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine


"Martin Rytz" <[EMAIL PROTECTED]> wrote on 08/10/2004 09:51:41 AM:

> Hi all
> 
> I have a problem with slow update queries like these (5 examples):
> 
> update url_cat set domain = '01net' where left( domain, instr( domain, 
'.' )
> -1 ) = '01net';
> update url_cat set domain = '1-meta' where left( domain, instr( domain, 
'.'
> ) -1 ) = '1-meta';
> update url_cat set domain = '105' where left( domain, instr( domain, '.' 
)
> -1 ) = '105';
> update url_cat set domain = '123love' where left( domain, instr( domain, 
'.'
> ) -1 ) = '123love'; 
> update url_cat set domain = 'google' where left( domain, instr( domain, 
'.'
> ) -1 ) = 'google'; 
> 
> before the update, the field domain contains 'google.com' or 'google.de' 
or
> 'google.ch' and after the update it contains only 'google'.
> 
> i have to make thousends of this updates an it takes a long time. the 
table
> 'url_cat' contains about 100'000 entries! an index would help, but mysql
> does not use any static index. the index should contain the
> where-condition... but this is not possible, because the lenght of the
> condition differs?! 
> 
> does anybody have another idea?
> 
> thank you in advance.
> martin 

Reply via email to