加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-03-12 15:46:21 所属栏目:编程 来源:网络整理
导读:假如它是一个int,我知道它会更快,只是无法领略字符串范例. 条记: 大大都亚洲说话之间没有空格.和mysql不能将句子分成单词.并且,我的意思是随机搜刮,也就是说,单词可以呈此刻句子的任何位置.最佳谜底一个重点是索引对某些范例的搜刮基础没有辅佐.譬喻: SELE

假如它是一个int,我知道它会更快,只是无法领略字符串范例.

条记:
大大都亚洲说话之间没有空格.和mysql不能将句子分成单词.并且,我的意思是随机搜刮,也就是说,单词可以呈此刻句子的任何位置. 最佳谜底 一个重点是索引对某些范例的搜刮基础没有辅佐.譬喻:

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

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

为什么?起首必要相识索引的事变道理.它们根基大将被索引的列与主键(记录指针)一路放入新表中.然后,他们在索引列而不是键上对该表举办排序.当您行使索引举办查找时,它可以很是快速地找到您想要的行,由于该索引已颠末排序,以便行使二进制搜刮等算法举办更有用的搜刮.

此刻再看一下该查询.通过在搜刮文本前面安排一个通配符,您方才汇报数据库您不确定列的起始位置.没有几多分类会有所辅佐;你如故必要遍历整个表格,以确保找到与表达式匹配的每笔记录.这意味着该列的任何正常索引对付此查询都毫无代价.

假如要在列中的任何位置搜刮文本列以查找搜刮字符串,则必要行使轻微差异的内容:全文索引.

此刻举办比拟看看这个查询:

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

这对付平凡索引完全正常,由于您知道您但愿列怎样开始.它如故可以与存储在索引中的排序值匹配,因此我们可以说它是可以搜刮的.

(编辑:湖南网)

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

    热点阅读