使用多个表在sql中搜索的最佳方法是什么?

时间:2012-10-16 02:28:40

标签: mysql sql

我的桌子上有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

1 个答案:

答案 0 :(得分:1)

只是一些观察:

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

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