From 48e96823d3ebc484589222e3c5a83fea90997856 Mon Sep 17 00:00:00 2001 From: Frédéric Buclin Date: Thu, 3 Jan 2013 14:45:13 +0100 Subject: Bug 824262: Querying for strings in comments is now ultra slow r=glob a=LpSolit --- Bugzilla/Search.pm | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'Bugzilla') diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 71893a5fc..b05da1a04 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -1915,13 +1915,24 @@ sub _quote_unless_numeric { sub build_subselect { my ($outer, $inner, $table, $cond, $negate) = @_; - # Execute subselects immediately to avoid dependent subqueries, which are - # large performance hits on MySql - my $q = "SELECT DISTINCT $inner FROM $table WHERE $cond"; - my $dbh = Bugzilla->dbh; - my $list = $dbh->selectcol_arrayref($q); - return $negate ? "1=1" : "1=2" unless @$list; - return $dbh->sql_in($outer, $list, $negate); + + if ($table eq 'longdescs') { + # There is no index on the longdescs.thetext column and so it takes + # a long time to scan the whole table unconditionally. For this table, + # we return the subselect and let the DB optimizer restrict the search + # to some given bug list only based on other search criteria available. + my $not = $negate ? "NOT" : ""; + return "$outer $not IN (SELECT DISTINCT $inner FROM $table WHERE $cond)"; + } + else { + # Execute subselects immediately to avoid dependent subqueries, which are + # large performance hits on MySql + my $q = "SELECT DISTINCT $inner FROM $table WHERE $cond"; + my $dbh = Bugzilla->dbh; + my $list = $dbh->selectcol_arrayref($q); + return $negate ? "1=1" : "1=2" unless @$list; + return $dbh->sql_in($outer, $list, $negate); + } } # Used by anyexact to get the list of input values. This allows us to -- cgit v1.2.3-24-g4f1b