1

我的桌子上有 3 张桌子,我想从用空格分割的短语中搜索它们

示例:快速棕色。

首先它会搜索短语“The quick brown”,然后是“The”、“quick”、“brown”

我的方法是合并所有表然后搜索。

SELECT body FROM
(SELECT body FROM table1
UNION ALL
SELECT body FROM table2)
) AS row WHERE body LIKE '%The quick brown%' OR body LIKE '%The%' OR body LIKE '%quick%' OR body LIKE '%brown%'

以更高的速度做到这一点的最佳方法是什么?

顺便说一句,我正在使用 MySQL

4

1 回答 1

1

只是一些观察:

  • 因为您OR的子句之间有 s,所以您的查询将始终执行like %the%例如该子句,该子句始终包含并为您提供比您最严格的子句更广泛的结果。我认为你不想要的东西。
  • 由于您有以 % 开头的子句,因此可以保证在那里进行全表扫描,即使那里没有那些全表联合。

我认为最好的解决方案是将像 sphinx 这样的全文搜索组件添加到您的技术堆栈中,因为它可以根据复杂的算法进行此类搜索并返回加权结果。

于 2012-10-16T02:48:06.363 回答