Я использую базу данных MySQL для своего проекта электронной коммерции.
И вот мой запрос для поиска:
SELECT DISTINCT p.id, p.name, p.price, p.created_at,
MATCH(p.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE) as Prv,
MATCH(b.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE) as Brv,
MATCH(bm.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE) as BMrv,
MATCH(o.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE) as Orv,
MATCH(ov.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE) as OVrv
FROM products p
LEFT JOIN brands b ON b.id = p.brand_id AND MATCH(b.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE)
LEFT JOIN brand_models bm ON bm.id = p.brand_model_id AND MATCH(bm.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE)
LEFT JOIN options o ON o.product_type_id = p.product_type_id AND MATCH(o.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE)
LEFT JOIN product_option_values pov ON pov.product_id = p.id
LEFT JOIN option_values ov ON ov.id = pov.option_value_id AND MATCH(ov.name) AGAINST('Sony* xperia* FHD* ' IN BOOLEAN MODE)
WHERE
(MATCH(p.name) AGAINST('Sony* xperia* FHD*' IN BOOLEAN MODE)
OR MATCH(b.name) AGAINST('Sony* xperia* FHD*' IN BOOLEAN MODE)
OR MATCH(bm.name) AGAINST('Sony* xperia* FHD*' IN BOOLEAN MODE)
OR MATCH(o.name) AGAINST('Sony* xperia* FHD*' IN BOOLEAN MODE)
OR MATCH(ov.name) AGAINST('Sony* xperia* FHD*' IN BOOLEAN MODE))
AND
COALESCE(b.id, bm.id, o.id, ov.id, pov.id) IS NOT NULL
GROUP BY
p.id
ORDER BY
((Prv*100) + Brv + BMrv + Orv + OVrv) DESC, p.updated_at DESC;
Здесь я использовал МАТЧ ПРОТИВ 3 раза. Сначала в SELECT для актуальности. Второй в JOIN и третий раз в WHERE.
1) Может ли использование MATCH, ПРОТИВ несколько раз влиять на скорость?
2) Если да, как я могу изменить свой код, чтобы получить тот же результат и снизить скорость?