[core] don't specify ORDER BY when counting total number of results, which allows the DB to be much faster

This commit is contained in:
Shish 2024-02-13 17:35:01 +00:00 committed by Shish
parent 28a3aad887
commit ebeb3b6c60

View file

@ -174,7 +174,7 @@ class Search
$total = $cache->get($cache_key); $total = $cache->get($cache_key);
if (is_null($total)) { if (is_null($total)) {
[$tag_conditions, $img_conditions, $order] = self::terms_to_conditions($tags); [$tag_conditions, $img_conditions, $order] = self::terms_to_conditions($tags);
$querylet = self::build_search_querylet($tag_conditions, $img_conditions, $order); $querylet = self::build_search_querylet($tag_conditions, $img_conditions, null);
$total = (int)$database->get_one("SELECT COUNT(*) AS cnt FROM ($querylet->sql) AS tbl", $querylet->variables); $total = (int)$database->get_one("SELECT COUNT(*) AS cnt FROM ($querylet->sql) AS tbl", $querylet->variables);
if (SPEED_HAX && $total > 5000) { if (SPEED_HAX && $total > 5000) {
// when we have a ton of images, the count // when we have a ton of images, the count
@ -240,7 +240,7 @@ class Search
private static function build_search_querylet( private static function build_search_querylet(
array $tag_conditions, array $tag_conditions,
array $img_conditions, array $img_conditions,
string $order, ?string $order = null,
?int $limit = null, ?int $limit = null,
?int $offset = null ?int $offset = null
): Querylet { ): Querylet {
@ -414,7 +414,9 @@ class Search
$query->append(new Querylet($img_sql, $img_vars)); $query->append(new Querylet($img_sql, $img_vars));
} }
$query->append(new Querylet(" ORDER BY ".$order)); if(!is_null($order)) {
$query->append(new Querylet(" ORDER BY ".$order));
}
if (!is_null($limit)) { if (!is_null($limit)) {
$query->append(new Querylet(" LIMIT :limit ", ["limit" => $limit])); $query->append(new Querylet(" LIMIT :limit ", ["limit" => $limit]));