From 657f495a00653f32a6be0d6c532b8f53dbf09ed6 Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Fri, 9 Jul 2010 22:15:39 -0700 Subject: Bug 577754: Make updating bugs_fulltext during checksetup.pl WAY faster for MySQL. r=mkanat, a=mkanat (module owner) --- Bugzilla/Install/DB.pm | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'Bugzilla') diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm index d9a36b75b..26e36f7df 100644 --- a/Bugzilla/Install/DB.pm +++ b/Bugzilla/Install/DB.pm @@ -3182,12 +3182,21 @@ sub _populate_bugs_fulltext { return if !@$bug_ids; my $num_bugs = scalar @$bug_ids; + my $command = "INSERT"; my $where = ""; if ($fulltext) { print "Updating bugs_fulltext for $num_bugs bugs...\n"; $where = "WHERE " . $dbh->sql_in('bugs.bug_id', $bug_ids); - $dbh->do("DELETE FROM bugs_fulltext WHERE " - . $dbh->sql_in('bug_id', $bug_ids)); + # It turns out that doing a REPLACE INTO is up to 10x faster + # than any other possible method of updating the table, in MySQL, + # which matters a LOT for large installations. + if ($dbh->isa('Bugzilla::DB::Mysql')) { + $command = "REPLACE"; + } + else { + $dbh->do("DELETE FROM bugs_fulltext WHERE " + . $dbh->sql_in('bug_id', $bug_ids)); + } } else { print "Populating bugs_fulltext with $num_bugs entries..."; @@ -3195,7 +3204,7 @@ sub _populate_bugs_fulltext { } my $newline = $dbh->quote("\n"); $dbh->do( - q{INSERT INTO bugs_fulltext (bug_id, short_desc, comments, + qq{$command INTO bugs_fulltext (bug_id, short_desc, comments, comments_noprivate) SELECT bugs.bug_id, bugs.short_desc, } . $dbh->sql_group_concat('longdescs.thetext', $newline, 0) -- cgit v1.2.3-24-g4f1b