遍历数据库记录的最佳和最快方法
Best and fastest way to walk through database records
我有一个 mysql 数据库 table 大约有 50k 条记录。每条记录都有一个数字列和一个比率列。
数字列包含唯一数字,例如:
- 3670
- 3720
- 654
- 36
- 45225
- 3
- 675572
所以基本上各种长度的随机数,可以是1位甚至8位。
我有一个号码,比如36703657896,我的任务是select从号码栏中找出最长和最短匹配的号码(匹配到号码的开头),得到费率。从上面提到的列表中,最长的匹配数是 3670 (36703657896),而最短的是 3 (36703657896).
谁能提出快速解决方案?它不一定必须在 mysql 中实现,如果速度更快,我愿意接受任何其他解决方案,例如某些 memcache。我目前正在使用 NodeJS 和 Lua 来访问这个数据库,但我可以使用任何东西以防它更快并且有更好的理由使用它。
您可以在 SQL 中执行此操作:
SELECT number FROM yourtable WHERE
number = substring('36703657896',1,length(number));
这假定您的 "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);
});
我有一个 mysql 数据库 table 大约有 50k 条记录。每条记录都有一个数字列和一个比率列。
数字列包含唯一数字,例如:
- 3670
- 3720
- 654
- 36
- 45225
- 3
- 675572
所以基本上各种长度的随机数,可以是1位甚至8位。
我有一个号码,比如36703657896,我的任务是select从号码栏中找出最长和最短匹配的号码(匹配到号码的开头),得到费率。从上面提到的列表中,最长的匹配数是 3670 (36703657896),而最短的是 3 (36703657896).
谁能提出快速解决方案?它不一定必须在 mysql 中实现,如果速度更快,我愿意接受任何其他解决方案,例如某些 memcache。我目前正在使用 NodeJS 和 Lua 来访问这个数据库,但我可以使用任何东西以防它更快并且有更好的理由使用它。
您可以在 SQL 中执行此操作:
SELECT number FROM yourtable WHERE
number = substring('36703657896',1,length(number));
这假定您的 "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);
});