sql – 对于char / varchar / text列,为什么该列的索引会使搜索更快?

前端之家收集整理的这篇文章主要介绍了sql – 对于char / varchar / text列,为什么该列的索引会使搜索更快?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如果它是一个int,我知道它会更快,只是无法理解字符串类型.

笔记:
大多数亚洲语言之间没有空格.和mysql不能将句子分成单词.而且,我的意思是随机搜索,也就是说,单词可以出现在句子的任何位置.

最佳答案
一个重点是索引对某些类型的搜索根本没有帮助.例如:

SELECT * FROM [MyTable] WHERE [MyVarcharColumn] LIKE '%' + @SearchText + '%'

没有任何正常的索引将有助于该查询.它永远注定要慢. LIKE表达式不是sargable.

为什么?首先需要了解索引的工作原理.它们基本上将被索引的列与主键(记录指针)一起放入新表中.然后,他们在索引列而不是键上对该表进行排序.当您使用索引进行查找时,它可以非常快速地找到您想要的行,因为该索引已经过排序,以便使用二进制搜索等算法进行更有效的搜索.

现在再看一下该查询.通过在搜索文本前面放置一个通配符,您刚刚告诉数据库您不确定列的起始位置.没有多少分类会有所帮助;你仍然需要遍历整个表格,以确保找到与表达式匹配的每条记录.这意味着该列的任何正常索引对于此查询都毫无价值.

如果要在列中的任何位置搜索文本列以查找搜索字符串,则需要使用稍微不同的内容:全文索引.

现在进行对比看看这个查询

SELECT * FROM [MyTable] WHERE [MyVarcharColumn] LIKE @SearchText + '%'

这对于普通索引完全正常,因为您知道您希望列如何开始.它仍然可以与存储在索引中的排序值匹配,因此我们可以说它是可以搜索的.

猜你在找的MySQL相关文章