]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 824262: Querying for strings in comments is now ultra slow
authorFrédéric Buclin <LpSolit@gmail.com>
Thu, 3 Jan 2013 13:45:13 +0000 (14:45 +0100)
committerFrédéric Buclin <LpSolit@gmail.com>
Thu, 3 Jan 2013 13:45:13 +0000 (14:45 +0100)
r=glob a=LpSolit

Bugzilla/Search.pm

index 71893a5fc1ba71fee6694d0134c638b8d9fc538c..b05da1a04b3134e30a58ce8c411f4c43a1499939 100644 (file)
@@ -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