我有大约50k记录的mysql数据库表。每个记录都有一个数字列和一个比率列。

数字列包含唯一数字,例如:


3670
3720
654
36
45225
3
675572


因此,基本上每种长度不同的随机数都可以是1位甚至8位。

我有一个数字,例如36703657896,我的任务是从数字列中选择最长和最短的匹配数字(与数字的开头匹配)并获得费率。在上述列表中,最长的匹配数是3670(36703657896),而最短的是3(36703657896)。

任何人都可以提出快速解决方案?它不一定必须在mysql中实现,如果速度更快,我可以接受任何其他解决方案,例如某些内存缓存。我目前正在与NodeJS和Lua一起访问此数据库,但是我可以使用任何东西以防万一,因为它更快,并且有更好的理由使用它。

最佳答案

您可以在SQL中执行此操作:

SELECT number FROM yourtable WHERE
   number = substring('36703657896',1,length(number));


假设您的“数字”列是文本类型,如果不是,则必须进行某种类型转换。

在具有node-memcached的node.js中:

var str='36703657896', maxMatchLength=4;
var getkeys=[];
for (var i=0; i <= maxMatchLength; i++) {
    getkeys[i] = str.substring(0,i);
}
memcached.getMulti(getkeys, function (err, data) {
  console.log(data);
});

07-28 10:10