我有一个数据库和一个包含大约100,000个键/值对记录的字符串,我想创建一个函数来查找该值。
考虑到性能(页面加载时间)和崩溃安全性,使用字符串或数据库是否更好?以下是我的两个代码示例:
1
echo find("Mohammad");
function find($value){
$sql = mysql_query("SELECT * FROM `table` WHERE `name`='$value' LIMIT 1");
$count = mysql_num_rows($sql);
if($count > 0){
$row = mysql_fetch_array($sql);
return $row["family"];
} else {
return 'NULL';
}
}
2
$string = "Ali:Golam,Mohammad:Offer,Reza:Now,Saber:Yes";
echo find($string,"Mohammad");
function find($string,$value){
$array = explode(",",$string);
foreach($array as $into) {
$new = explode(":",$into);
if($new[0] == $value) {
return $new[1];
break;
}
}
}
答案 0 :(得分:3)
数据库很快,也许它们没有PHP中的基本字符串操作那么快,但如果有大量数据,数据库可能会更快。基本选择查询(在我当前的默认桌面硬件上)大约需要15毫秒,缓存时间不到1毫秒,如果索引正确,这几乎与表中的名称数量无关。所以你的网站总是很快。
数据库不会导致StackOverflow或内存不足错误并导致网站崩溃(这完全取决于您的PHP设置和硬件)
数据库更灵活,想象您想在创建第一个数据集后添加/删除/编辑名称。使用" INSERT INTO"," DELETE FROM"非常简单和"更新"修改数据,比在代码中的某个地方编辑大约100.000个条目更好。
$mysqli = new mysqli("host", "username", "password", "dbname"); $stmt = $mysqli->prepare( 'SELECT string FROM table WHERE name = ? LIMIT 1' ); $stmt->bind_param("s", $value); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($string); $stmt->fetch(); $stmt->close();
这使用MySQLi和Prepared Statements(for security),而不是被删除的MySQL扩展(in PHP 5.5)