gpt4 book ai didi

mysql - 仅在 MySQL 列的右侧部分建立索引

转载 作者:行者123 更新时间:2023-11-29 06:01:33 26 4
gpt4 key购买 nike

在 InnoDB 表中,有一个 varchar 列,我只想对最后 10 个字符进行搜索查询。当我在整个列上创建索引并执行搜索 where right(mycol, 10) = p_search 时,未使用索引。有没有办法创建索引,以便对最后 10 个字符的搜索查询使用索引?我知道 MySQL 提供在左侧部分创建索引,但在这种情况下不起作用。

最佳答案

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

ALTER TABLE yourTable 
ADD newCol CHAR(10) AS (RIGHT(oldCol, 10)) STORED,
ADD INDEX (newCol);

请注意,您不必更改查询即可使用虚拟列。 documentation说:

If a generated column is indexed, the optimizer recognizes query expressions that match the column definition and uses indexes from the column as appropriate during query execution, even if a query does not refer to the column directly by name.

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

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

关于mysql - 仅在 MySQL 列的右侧部分建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44478184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com