我正在使用 MySQL 5.5。我有一个使用子查询的查询(全文)。为了提高性能和我使用分页的事实,我使用 LIMIT 来限制结果的数量。
SELECT *
FROM (
SELECT id, type, type_id, content, MATCH(content) AGAINST('john') as relevance, IFNULL (parent_type, UUID()) as parent_type, IFNULL(parent_id, UUID()) as parent_id
FROM search_index
WHERE MATCH(content) AGAINST('john*' IN BOOLEAN MODE) GROUP BY parent_type, parent_id ) as search
GROUP BY search.type, search.type_id DESC LIMIT 10;
问题是,除此之外,我需要在每个搜索查询中发回可能结果的总数,例如 (50000)。为了得到计数,我正在使用:
SELECT COUNT(*) FROM(
SELECT *
FROM (
SELECT id, type, type_id, content, MATCH(content) AGAINST('john') as relevance, IFNULL (parent_type, UUID()) as parent_type, IFNULL(parent_id, UUID()) as parent_id
FROM search_index
WHERE MATCH(content) AGAINST('john*' IN BOOLEAN MODE) GROUP BY parent_type, parent_id ) as search
GROUP BY search.type, search.type_id) as count;
不过,这确实让我有些不安。这是计数查询的解释:
search_index
是 上的全文索引content
。
是除和search_index_no_ft
之外的所有列的索引。上有一个主键。content
id
id
有没有更好的方法来做到这一点,也许是一种优化的方法?或者,有没有办法将 2 个查询(计数和搜索)合并为 1 个?