Я написал поисковый запрос, который ищет похожие имена. Он работает с Power Set тегов и сортирует по сходство. например, если текст поиска: shakespeare tragedy hamlet
Как оптимизировать поисковый запрос SQL?
SQL, генерируемый:
SELECT DISTINCT id FROM (
(SELECT * FROM books
WHERE name LIKE '%shakespeare%'
AND name LIKE '%tragedy%'
AND name LIKE '%hamlet%' limit 10)
UNION
(SELECT * FROM books
WHERE name LIKE '%shakespeare%'
AND name LIKE '%tragedy%' limit 10)
UNION
(SELECT * FROM books
WHERE name LIKE '%shakespeare%'
AND name LIKE '%hamlet%' limit 10)
UNION
(SELECT * FROM books
WHERE name LIKE '%tragedy%'
AND name LIKE '%hamlet%' limit 10)
UNION
(SELECT * FROM books WHERE name LIKE '%shakespeare%' limit 10)
UNION
(SELECT * FROM books WHERE name LIKE '%tragedy%' limit 10)
UNION
(SELECT * FROM books WHERE name LIKE '%hamlet%' limit 10)
) limit 10
есть две проблемы:
булеана создает
2^tags - 1
союзы в моем запросе, что означает, если кто-то хочет быть точным и использует 6 тегов, это будет 63 союза, и это делает мой запрос намного медленнее.если первый союз возвращает 10 строк, другие бесполезны.
Есть ли способ оптимизировать этот запрос?
Где код, который генерирует этот sql? И вы ищете только строку, которая будет содержать все теги? или 1 из них достаточно, как последние 3 строки вашего запроса. – sagi
@sagi Я считаю, что все знают, как работает poweret, поэтому я не прошел код генерации. Я ищу похожие строки, отсортированные по сходству. –