mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
[ticket/13674] Change MySQL native total search results calculation
This changes how the native FULLTEXT search calculates the total match number for MySQL. This should improve performance as there is one less query being made and it is being searched using the technique mentioned in the manual PHPBB3-13674
This commit is contained in:
parent
f3ab7aae9e
commit
f4c423cea1
1 changed files with 8 additions and 11 deletions
|
@ -823,6 +823,13 @@ class fulltext_native extends \phpbb\search\base
|
|||
);
|
||||
}
|
||||
|
||||
// if using mysql and the total result count is not calculated yet, get it from the db
|
||||
if(!$total_results && $is_mysql)
|
||||
{
|
||||
// Also count rows for the query as if there was not LIMIT. Add SQL_CALC_FOUND_ROWS to SQL
|
||||
$sql_array['SELECT'] = 'SQL_CALC_FOUND_ROWS ' . $sql_array['SELECT'];
|
||||
}
|
||||
|
||||
$sql_array['WHERE'] = implode(' AND ', $sql_where);
|
||||
$sql_array['GROUP_BY'] = ($group_by) ? (($type == 'posts') ? 'p.post_id' : 'p.topic_id') . ', ' . $sort_by_sql[$sort_key] : '';
|
||||
$sql_array['ORDER_BY'] = $sql_sort;
|
||||
|
@ -838,19 +845,9 @@ class fulltext_native extends \phpbb\search\base
|
|||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
// if we use mysql and the total result count is not cached yet, retrieve it from the db
|
||||
if (!$total_results && $is_mysql)
|
||||
{
|
||||
// Count rows for the executed queries. Replace $select within $sql with SQL_CALC_FOUND_ROWS, and run it
|
||||
$sql_array_copy = $sql_array;
|
||||
$sql_array_copy['SELECT'] = 'SQL_CALC_FOUND_ROWS p.post_id ';
|
||||
|
||||
$sql_calc = $this->db->sql_build_query('SELECT', $sql_array_copy);
|
||||
unset($sql_array_copy);
|
||||
|
||||
$this->db->sql_query($sql_calc);
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
// Get the number of results as calculated by MySQL
|
||||
$sql_count = 'SELECT FOUND_ROWS() as total_results';
|
||||
$result = $this->db->sql_query($sql_count);
|
||||
$total_results = (int) $this->db->sql_fetchfield('total_results');
|
||||
|
|
Loading…
Add table
Reference in a new issue