我寫了一個搜索查詢來搜索相似的名字。它適用於電源組的標籤,它按相似性排序。例如,如果搜索文本是: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我相信每個人都知道powerset是如何工作的,這就是爲什麼我沒有經歷代碼。我正在尋找按相似性排序的類似行。 –