我有大约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);
});