我的数组结构是:
----------------------------------------------
array{
[0]{
[name] => 我是PHP
}
[1]{
[name] => 我是大大MYSQL
}
[2]{
[name] => mysql
}
[...]{
[name] => ...
}
}
假设我的数据有1W条的话,如何来做效率比较高一些呢?
10 个解决方案
#1
遍历数组,在正则匹配前进行strpos查找%确定有urlencode的字符后才进行decode并做中文匹配。
更进一步的话,可以自行计算%后面的字符序列是否为普通ASCII字符。
不过我觉得你可以从更根源的地方开始考虑这个问题,一开始选取数据的时候,就用:
这样的话读到内存中的数据量会少一些,可以前面查找%的步骤,性能方面应该也会更好一些。
更进一步的话,可以自行计算%后面的字符序列是否为普通ASCII字符。
不过我觉得你可以从更根源的地方开始考虑这个问题,一开始选取数据的时候,就用:
SELECT name FROM tbl_name WHERE name regexp '%[a-zA-Z0-9]{2}'
这样的话读到内存中的数据量会少一些,可以前面查找%的步骤,性能方面应该也会更好一些。
#2
我试着把关键字先urlencode后再放到SQL语句里面查询,貌似没有效果~!
#3
想到一个好的方法了,呵呵!
使用文件缓存的思路,先将所有数据读出,进行字符匹配,完成后把数据存入到文本中。设置一个数据更新的时间段,每次有提交查询的时候先检查数据缓存文件是否存在,时间是否在设置的时间段内,如果满足条件则直接拿关键子文本数据里的数据进行匹配,否则从新重数据库中重新获取数据。效率相对要比每次去读完数据库数据完成要高!
各位PHP大哥们可否帮小弟看看这方法可行否?
使用文件缓存的思路,先将所有数据读出,进行字符匹配,完成后把数据存入到文本中。设置一个数据更新的时间段,每次有提交查询的时候先检查数据缓存文件是否存在,时间是否在设置的时间段内,如果满足条件则直接拿关键子文本数据里的数据进行匹配,否则从新重数据库中重新获取数据。效率相对要比每次去读完数据库数据完成要高!
各位PHP大哥们可否帮小弟看看这方法可行否?
#4
哎~!咋都没人呢~?再来一个兄弟我就结帖了~!
#5
你的查询语句? 如果有精确的关键字,其urlencode的结果是确定的,肯定可以用于查询。
#6
#7
有很多需要考虑的地方,你的编码是什么?你要查询的是中文还是什么?
效率最高的是使用sql语句中就查询完成
效率最高的是使用sql语句中就查询完成
#8
我的SQL 语句是
$str = urlencode("小猪");
"select * from table where key link {$str}"
$str = urlencode("小猪");
"select * from table where key link {$str}"
#10
还是SQL效率高呗,什么文件缓存我看还是不怎么行。I/O 数据库会快点。
#1
遍历数组,在正则匹配前进行strpos查找%确定有urlencode的字符后才进行decode并做中文匹配。
更进一步的话,可以自行计算%后面的字符序列是否为普通ASCII字符。
不过我觉得你可以从更根源的地方开始考虑这个问题,一开始选取数据的时候,就用:
这样的话读到内存中的数据量会少一些,可以前面查找%的步骤,性能方面应该也会更好一些。
更进一步的话,可以自行计算%后面的字符序列是否为普通ASCII字符。
不过我觉得你可以从更根源的地方开始考虑这个问题,一开始选取数据的时候,就用:
SELECT name FROM tbl_name WHERE name regexp '%[a-zA-Z0-9]{2}'
这样的话读到内存中的数据量会少一些,可以前面查找%的步骤,性能方面应该也会更好一些。
#2
我试着把关键字先urlencode后再放到SQL语句里面查询,貌似没有效果~!
#3
想到一个好的方法了,呵呵!
使用文件缓存的思路,先将所有数据读出,进行字符匹配,完成后把数据存入到文本中。设置一个数据更新的时间段,每次有提交查询的时候先检查数据缓存文件是否存在,时间是否在设置的时间段内,如果满足条件则直接拿关键子文本数据里的数据进行匹配,否则从新重数据库中重新获取数据。效率相对要比每次去读完数据库数据完成要高!
各位PHP大哥们可否帮小弟看看这方法可行否?
使用文件缓存的思路,先将所有数据读出,进行字符匹配,完成后把数据存入到文本中。设置一个数据更新的时间段,每次有提交查询的时候先检查数据缓存文件是否存在,时间是否在设置的时间段内,如果满足条件则直接拿关键子文本数据里的数据进行匹配,否则从新重数据库中重新获取数据。效率相对要比每次去读完数据库数据完成要高!
各位PHP大哥们可否帮小弟看看这方法可行否?
#4
哎~!咋都没人呢~?再来一个兄弟我就结帖了~!
#5
你的查询语句? 如果有精确的关键字,其urlencode的结果是确定的,肯定可以用于查询。
#6
#7
有很多需要考虑的地方,你的编码是什么?你要查询的是中文还是什么?
效率最高的是使用sql语句中就查询完成
效率最高的是使用sql语句中就查询完成
#8
我的SQL 语句是
$str = urlencode("小猪");
"select * from table where key link {$str}"
$str = urlencode("小猪");
"select * from table where key link {$str}"
#9
SELECT name FROM tbl_name WHERE name regexp '%[a-zA-Z0-9]{2}'
#10
还是SQL效率高呗,什么文件缓存我看还是不怎么行。I/O 数据库会快点。