MySQL表中的地址搜索

MySQL表中的地址搜索,mysql,sql,search,database-design,Mysql,Sql,Search,Database Design,我有一个表,其中包含500万个作为字符串的地址。 有一个用户界面,允许您按地址进行搜索,它是以最简单的方式实现的-使用LIKE语法,在搜索字符串的两端使用通配符。 然而,这种方法非常慢(特别是当搜索结果必须按某些条件排序时)。 我曾想过使用全文搜索,因为它会快得多,但它限制了用户,而且我不想要它,因为大多数搜索查询只包含word的一部分。 地址也可以缩写 我能做什么?如何在不牺牲大量用户体验的情况下实现更高效的地址搜索 编辑 我刚刚读到,在对全文搜索执行匹配时,我实际上可以在字符串末尾使用通配符

我有一个表,其中包含500万个作为字符串的地址。 有一个用户界面,允许您按地址进行搜索,它是以最简单的方式实现的-使用
LIKE
语法,在搜索字符串的两端使用通配符。 然而,这种方法非常慢(特别是当搜索结果必须按某些条件排序时)。 我曾想过使用全文搜索,因为它会快得多,但它限制了用户,而且我不想要它,因为大多数搜索查询只包含word的一部分。 地址也可以缩写

我能做什么?如何在不牺牲大量用户体验的情况下实现更高效的地址搜索

编辑 我刚刚读到,在对全文搜索执行
匹配时,我实际上可以在字符串末尾使用通配符。
因此,如果我存储反向地址,也许我可以进行前缀通配符全文搜索。

但它会更快吗?速度有多快?有一些基准吗?我找不到一个。

你可能想调查一下。SQL中的
LIKE
运算符效率非常低,尤其是当您有那么多记录时。

是的,我有,但它仍然不是FAStOP在他的问题中特别提到的全文,以及为什么他担心它可能不适用于他的需要<像
这样的代码可以非常有效,但只有在模式可以与索引前缀匹配的情况下;我错过了那部分。然而,我不知道全文搜索是如何限制用户的,我也不知道。但是当“大多数搜索查询只包含单词的一部分”时,它肯定不会有帮助。@eggyal您可以使用
*
构建全文搜索来搜索单词的一部分。这是一个很好的例子,尽管它的MSSQL不是mySQL。