【发布时间】:2017-01-24 06:42:49
【问题描述】:
有一个简化的表mytable,其列('id', 'mycolumn') 分别为int 和varchar(255)。
在mycolumn 中为当前字符串找到具有最长公共右侧部分(最长尾)的行的最快方法是什么?桌子很大。
例如,对于字符串"aaabbbkr84"
我们会通过最长的尾巴“bkr84”找到2 - "wergerbkr84":
1 - "gbkyugbk9"
2 - "wergerbkr84"
3 - "gbkyugbk4".
为了提高性能,我的想法是创建另一个包含还原字符串的列。但是我不确定它是否有帮助,也没有更好的方法。这样我会查找(直到我得到 0 个结果以返回上一个结果)来查找
SELECT id, mycolumn FROM mytable
where reverted like '4%';
SELECT id, mycolumn FROM mytable
where reverted like '48%';
SELECT id, mycolumn FROM mytable
where reverted like '48r%';
SELECT id, mycolumn FROM mytable
where reverted like '48rk%';
SELECT id, mycolumn FROM mytable
where reverted like '48rkb%'; ' <-- looking for this one
SELECT id, mycolumn FROM mytable
where reverted like '48rkbb%'; ' 0 results.
找到0个结果,后退一步:48rkb。这意味着2 - "wergerbkr84" 就是答案。
1 查询以通过最长尾查找一行会更好(如您所见,我在上面有一个查询循环)。 但是,性能是#1。
非常感谢。
【问题讨论】:
标签: mysql sql string substring sql-like