我有一个包含大约50k记录的mysql数据库表。每条记录都有一个数字列和一个费率列。
数字列包含唯一的数字,如:
所以基本上每种不同长度的随机数,都可以是1位数甚至8位数。
我有一个号码,如36703657896,我的任务是从数字列中选择最长和最短的匹配数字(与数字的开头匹配)并获得费率。从上面提到的列表中,最长匹配数是3670( 3670 3657896),而最短匹配数是3( 3 6703657896)。
任何人都可以提出快速解决方案吗?它不一定必须在mysql中实现,如果它更快,我对任何其他解决方案都是开放的,比如一些memcache。我目前正在使用NodeJS和Lua来访问这个数据库,但我可以使用任何东西,以防它更快,并有更好的理由使用它。
答案 0 :(得分:0)
您可以在SQL中执行此操作:
SELECT number FROM yourtable WHERE
number = substring('36703657896',1,length(number));
这假定您的“数字”列是文本类型,如果不是,您将不得不进行某种类型的转换。
在node.js中使用node-memcached:
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);
});