首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中仅对列的右边部分进行索引

在MySQL中仅对列的右边部分进行索引
EN

Stack Overflow用户
提问于 2017-06-10 21:20:09
回答 1查看 1K关注 0票数 1

在InnoDB表中,有一个varchar列,我希望只对最后10个字符进行搜索查询。当我在整个列上创建索引并执行搜索where right(mycol, 10) = p_search时,不使用该索引。是否有一种方法可以创建索引,以便对最后10个字符的搜索查询使用该索引?据我所知,MySQL在左侧提供创建索引,但在这种情况下不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-10 21:40:53

如果使用的是MySQL 5.7,则可以添加一个生成的列,其中包含列的右侧,并对其进行索引。

代码语言:javascript
复制
ALTER TABLE yourTable 
    ADD newCol CHAR(10) AS (RIGHT(oldCol, 10)) STORED,
    ADD INDEX (newCol);

请注意,您不必更改查询以使用虚拟列。文档说:

如果生成的列被索引,优化器将识别与列定义匹配的查询表达式,并在查询执行期间酌情使用来自该列的索引,即使查询不按名称直接引用该列。

因此,如果编写WHERE RIGHT(oldCol, 10) = "abcdefghij",优化器将其视为WHERE newCol = "abcdefghij"并使用索引。

如果使用的是旧版本,则可以将其添加为真正的列,并在列发生更改时使用触发器更新它(这本质上是STORED虚拟列自动进行的)。但在这种情况下,您需要更改查询以测试新列。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44478184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档