diff options
author | Dan McGee <dan@archlinux.org> | 2009-04-11 16:40:58 -0500 |
---|---|---|
committer | Loui Chang <louipc.ist@gmail.com> | 2009-06-18 01:47:17 -0400 |
commit | 1ceeda8ab529ba0ba04664621e9edb5f4dfae397 (patch) | |
tree | 74a14ac43d64c17a14271fdabb056b634e61f0d6 | |
parent | e2b3bd1c37d91a747e8f774bbb91aad3dc466c68 (diff) |
Specify explicit joins for package search
Refactor the query to use explicit LEFT JOINs, which appears to be handled
by MySQL in a saner fashion than the previous implicit join syntax. This is
part two in a slight fixup for observed slow queries in the production
environment. With the new indexes and this fixup, a particular iteration of
this query will examine only 13346 rows instead of 272060.
Signed-off-by: Dan McGee <dan@archlinux.org>
Signed-off-by: Loui Chang <louipc.ist@gmail.com>
-rw-r--r-- | web/lib/pkgfuncs.inc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/web/lib/pkgfuncs.inc b/web/lib/pkgfuncs.inc index 056552b..a4a2dfc 100644 --- a/web/lib/pkgfuncs.inc +++ b/web/lib/pkgfuncs.inc @@ -437,19 +437,19 @@ function pkg_search_page($SID="") { Packages.Name, Packages.Version, Packages.Description, Packages.NumVotes, Packages.ID, Packages.OutOfDate - FROM PackageCategories, PackageLocations, Packages + FROM Packages LEFT JOIN Users ON (Packages.MaintainerUID = Users.ID) "; - if ($SID) { $q .= "LEFT JOIN PackageVotes ON (Packages.ID = PackageVotes.PackageID AND PackageVotes.UsersID = $myuid) LEFT JOIN CommentNotify ON (Packages.ID = CommentNotify.PkgID AND CommentNotify.UserID = $myuid) "; } - $q .= "WHERE - Packages.CategoryID = PackageCategories.ID - AND Packages.LocationID = PackageLocations.ID - AND Packages.DummyPkg = 0 "; + $q .= "LEFT JOIN PackageCategories + ON (Packages.CategoryID = PackageCategories.ID) + LEFT JOIN PackageLocations + ON (Packages.LocationID = PackageLocations.ID) + WHERE Packages.DummyPkg = 0 "; // TODO: possibly do string matching on category and // location to make request variable values more sensible |