快速'%term%'查找需要什么样的索引?

时间:2010-04-02 15:50:54

标签: mysql database-design

我正在使用MySQL。

我有几个这样的查找:

SELECT * from users WHERE user_name LIKE '%search_term%'

我需要什么索引来快速进行这些查找?

4 个答案:

答案 0 :(得分:2)

没有索引会有所帮助。这就像在字典中查找包含子字符串“ab”的所有单词一样。你仍然需要看每一个字。

你有没有看过Full Text Search

答案 1 :(得分:2)

如果由于某种原因全文搜索对您不起作用(首先尝试它是最好的解决方案),我遇到了这样的问题,我首先搜索字符串LIKE'search_term%',它可以使用索引然后只尝试较长的搜索,如果第一个没有返回任何记录。大多数人会使用搜索词的第一个字母进行搜索,他们可以获得更快的回报。在网站上告诉他们使用搜索词的第一个字母将提高搜索的性能。或甚至使它成为一项要求,并避免不必“搜索我输入的这些随机字母”搜索。

答案 2 :(得分:2)

我们过去常常运行这些类型的查询,但很快意识到像MySQL这样的关系数据库并不适合全文搜索。根据您拥有的其他查找类型,您可能需要查看LuceneSolr

Lucene支持索引和搜索,与数据库完全分开。它非常快,还支持拼写检查,词干,相关性和通配符搜索。

Solr是一个由Lucene提供支持的搜索服务器,也支持MySQL数据库集成。强烈推荐。

答案 3 :(得分:0)

在字符串的两端都有一个通配符,没有索引会使速度更快。它必须进行全表扫描。但是,如果通配符字符串只是结尾,例如'term%',然后将使用索引。

正如其他人所指出的那样,全文索引也可能对您有用。但是,它仅支持“全字”搜索,并且(默认情况下)仅支持包含4个或更多字符的字。

相关问题