如果是int,我知道会快一些,就是看不懂string类型。
注意事项: 大多数亚洲语言单词之间没有空格。而 mysql 不能将句子拆分成单词。另外,我指的是随机搜索,即单词可以出现在句子的任何位置。
最佳答案
一个要点是索引对某些类型的搜索根本没有帮助。例如:
SELECT * FROM [MyTable] WHERE [MyVarcharColumn] LIKE '%' + @SearchText + '%'
再多的普通索引也无助于该查询。它永远注定是缓慢的。 LIKE
表达式不是 sargable .
为什么?您首先需要了解索引的工作原理。他们基本上将被索引的列与主键(记录指针)一起放入一个新表中。然后他们根据索引列而不是键对该表进行排序。当您使用索引进行查找时,它可以非常快速地找到您想要的行,因为此索引已排序以促进使用二进制搜索等算法进行更高效的搜索。
现在再次查看该查询。通过在搜索文本前放置一个通配符,您只是告诉数据库您不确定您的列以什么开头。再多的分类也无济于事;您仍然需要遍历整个表以确保找到与表达式匹配的每条记录。这意味着该列上的任何普通索引对于此查询都是毫无值(value)的。
如果您想在文本列中搜索列中任意位置的搜索字符串,您需要使用一些不同的东西:全文索引。
现在对比一下这个查询:
SELECT * FROM [MyTable] WHERE [MyVarcharColumn] LIKE @SearchText + '%'
这对于普通索引来说工作得很好,因为你知道你希望列如何开始。它仍然可以与存储在索引中的排序值匹配,因此我们可以说它是可搜索的。
关于sql - 对于 char/varchar/text 列,为什么该列的索引可以加快搜索速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399533/