加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2021-03-10 02:46:54 所属栏目:MySql教程 来源:网络整理
导读:如果它是一个int,我知道它会更快,只是无法理解字符串类型. 笔记: 大多数亚洲语言之间没有空格.和mysql不能将句子分成单词.而且,我的意思是随机搜索,也就是说,单词可以出现在句子的任何位置.最佳答案一个重点是索引对某些类型的搜索根本没有帮助.例如: SE

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

笔记:
大多数亚洲语言之间没有空格.和mysql不能将句子分成单词.而且,我的意思是随机搜索,也就是说,单词可以出现在句子的任何位置. 最佳答案 一个重点是索引对某些类型的搜索根本没有帮助.例如:

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

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

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

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

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

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

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

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

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读