> -----Original Message-----
> From: Chris W [mailto:[EMAIL PROTECTED]
> Sent: Monday, February 04, 2008 9:05 PM
> To: Daevid Vincent; MYSQL General List
> Subject: Re: Deleting duplicate rows via temporary table
> either hung or taking way way too long
>
>
>
> Daevid Vincent wrote:
> > DROP TABLE IF EXISTS `dupes`;
> > CREATE TEMPORARY TABLE dupes
> > SELECT LogID FROM buglog GROUP BY BID, TS HAVING
> count(*) > 1 ORDER
> > BY BID;
> > LOCK TABLES buglog WRITE;
> > SELECT * FROM buglog WHERE LogID IN (SELECT LogID FROM
> dupes) LIMIT 10;
> > #DELETE FROM buglog WHERE LogID IN (SELECT LogID FROM dupes);
> > UNLOCK TABLES;
> >
> > The problem is the SELECT (DELETE) is either taking way too
> long to return
> > or it's hung. I don't sit there long enough to figure it
> out. It seems like
> > it shouldn't take as long as I wait. If I run the delete
> version, my buglog
> > table count never decreases in the time I wait.
> >
> >
>
> I am pretty sure I have does this in the past and having an
> index on the
> temporary table made it amazingly faster. I assume the LogID
> field has
> an index in the other table already, if not you will want to add an
> index for that field in that table too.
>
> The easiest way is to add the index with your create temporary table
> statement and then do an ...
> INSERT INTO dupes (SELECT .....)
WOW! You are right! That's silly. It's a table with a single column. All
unique.
Anyways, here's the magic incantation that worked for me:
DROP TABLE IF EXISTS `dupes`;
CREATE TEMPORARY TABLE dupes
SELECT LogID FROM buglog GROUP BY BID, TS HAVING count(*) > 1 ORDER
BY BID;
ALTER TABLE `dupes` ADD INDEX `LogID` ( `LogID` ); #//This index is
critical.
DELETE FROM buglog WHERE LogID IN (SELECT LogID FROM dupes);
DROP TABLE IF EXISTS `dupes`;
Trying to use the LOCK TABLES didn't work for me for some reason, but I
didn't care enough to try and debug why. I just wanted the rows gone. :)
Thanks C.W.
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]