element
クエリに一致するものを収集するサイトの検索クエリを実行しています。items
ただし、にリンクされているものが1つ以上ある場合とない場合がありelement
ます。items
したがって、にリンクされているすべての一致をカウントするサブクエリがありelement
ます。
このクエリは機能します。しかし、信じられないほどゆっくり。現時点では約50秒かかります。サブクエリを破棄すると、はるかに高速になります。
SELECT DISTINCT e.id,
MATCH (e.heading) AGAINST ('+(room)') AS h_score,
MATCH (e.text) AGAINST ('+(room)') AS t_score,
(
SELECT SUM( MATCH (item.heading, item.text) AGAINST ('+(room)') ) AS itemscore
FROM item LEFT JOIN _element_item ON item.id = _element_item.item_id
WHERE _element_item.item_id = e.id
AND MATCH (item.heading, item.text) AGAINST ('+(room)')
) AS i_score
FROM element AS e
LEFT JOIN _element_brand ON e.id = _element_brand.element_id
LEFT JOIN _element_language ON e.id = _element_language.element_id
LEFT JOIN _element_region ON e.id = _element_region.element_id
LEFT JOIN _element_type ON e.id = _element_type.element_id
LEFT JOIN _element_group ON e.id = _element_group.element_id
WHERE _element_brand.brand_id = 1
AND _element_language.language_iso = 'en'
AND _element_region.region_id = 1
AND _element_type.type_id = 1
AND _element_group.group_id = 1
AND e.replacement_id IS NULL
AND e.status = 1
AND MATCH (e.heading, e.text) AGAINST ('+(room)')
ORDER BY t_score + h_score DESC LIMIT 100
これをより速く実行する方法はありますか?
?element
に一致する前に、すべてに対して完全なサブクエリを実行していると思います。element
親クエリの一致に対してのみサブクエリを実行するようにできますか?もしそうなら、どのように?