bounty还有4天到期。回答此问题可获得+50声望奖励。Thomas希望引起更多关注这个问题。
我正在使用的一个表有一个char(19)列,我们称之为P。由于某些情况,我需要检查是否在P中找到一个10个字符的变量(在P中字符串的末尾)。因此我在做:其中P类似于CONCAT(' %',variableName)。
因此,性能很差。现在一个可能的解决方案是引入一个自动更新/计算的列,我们称之为P10 with char(10)。然后我可以使用P10,比如variableName,这样更好。(特别是在索引方面)。
现在的问题是什么是性能方面更好的方法(我没有找到任何信息)?-Alter TABLE MyTable add column P10 char(10)GENERATED ALWAYS AS substr(P,9,10)
1条答案
按热度按时间bpsygsoo1#
如果您确定列
P
始终是完整的19个字符长,并且搜索值始终是10个字符长,您可以索引搜索表达式并使用它进行搜索(键入与您索引的内容完全相同)。例如:请参见db<>fiddle上的运行示例。
请注意,
substr(p, 10, 10)
的键入方式与SELECT中的字母完全相同。或者,如果您想搜索字符串的最后一个字符,一般的解决方案是索引反向值,然后使用反向模式进行搜索。这样,
%
将位于搜索模式的末尾,引擎将自然地使用索引。