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 つに結合する方法はありますか?