Why not do something like:
my $q = "DELETE FROM master WHERE master_id NOT IN (";
$q .= join(',', @masteridarray);
$q .= ')';
$dbi_dbh->do($q);
Though this will obviously fall into the same size limitations that you were
doing, but it should execute a lot faster, and be a bit smaller than your
example. (I don't have an answer for this, being rather new to the mysql
community myself).
-Chris
> Hello,
>
> I have a table with approximately 68,000 records. I then get a file
> uploaded to the server with approximately 68,000 master_id's listed in it.
> If the master_id's in our MySQL table are not one of the master_id's listed
> in the file, they need to be deleted from the MySQL table.
>
> Right now, a Perl script reads the master_id's from the uploaded file, and
> puts them all into an array in memory. We then loop through all the
> master_id's from the MySQL table. If the MySQL master_id is not in the
> array of master_id's from the file, then the record is deleted. This works
> fine if we are using a small amount of records, but there are over 68,000 of
> them. It seems like there should be a better, more efficient way of doing
> this.
>
> One thought that I had, was to create one big huge DELETE statement.
> Something like this:
>
> $q = "DELETE FROM master";
>
> $where = " WHERE ( ";
> $morethan1 = 0;
> foreach (@masteridarray) { #this is our 68,000 valid id's
> if ($morethan1) {
> $where .= " OR master_id != $_ ";
> }else{
> $where .= " master_id != $_ ";
> $morethan1 = 1;
> }
> }
> $where .= ")";
> if ($morethan1) {
> $q .= $where;
> }
>
> my $sth = $dbi_dbh->prepare($q);
> $sth->execute;
>
> However, I wasn't sure if MySQL could process something like this. And if
> it could, how much bigger could the query statement get (the number of
> records in the table will easily exceed 100,000 before the end of the year,
> and continue to grow even bigger next year)?
>
> Another thought/question was whether MySQL had some mechanism for searching
> through the upload file itself. Something along the lines of, "DELETE FROM
> master where master_id != [any of the masterid's in file ./id.txt]".
>
> The number of records in this table is only going to grow over the coming
> months, so, I want to make sure that I have a solution that is scalable.
> Any/all suggestions will be greatly appreciated!
>
> Mark
>
>
> Imagine your own dedicated server, but ...
> without all the hassles of managing it yourself!
> Managed Dedicated Servers
> http://www.ServerPros.com
>
> --
> Mark A. Sharkey
> PrecisionPros.com Network
> 6543 East Omega Street
> Mesa, Arizona 85215
> 800 844 4434 toll free
> 480 461 9765 local
> 480 461 9312 fax
>
>
>
> ---------------------------------------------------------------------
> Before posting, please check:
> http://www.mysql.com/manual.php (the manual)
> http://lists.mysql.com/ (the list archive)
>
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail
> <[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
>
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php