【问题标题】:PHP: MySQL Select Query vs String OperationPHP:MySQL 选择查询与字符串操作
【发布时间】:2015-03-18 09:19:07
【问题描述】:

我有一个数据库和一个包含大约 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;
        }
    }
}

【问题讨论】:

  • 两者都不是更好;他们是不同的
  • 如果你要求更快,我投票给第二个...
  • 但是内存中包含 100,000 个名称的字符串将很难更改(尤其是在代码中),并且还会占用大量 PHP 内存......所以虽然看起来更快,它会在系统的其他地方引起很多问题....如果您需要更改字符串中名称的详细信息,或添加新名称/删除旧名称,那么您应该使用数据库
  • 但是停止使用旧的、已弃用的 MySQL 扩展,并开始使用 MySQLi 或 PDO 以及准备好的语句/绑定变量
  • 我想,你需要在这里提出你的问题:codereview.stackexchange.com

标签: php mysql arrays explode


【解决方案1】:

数据库肯定是个好主意。

  1. 数据库速度很快,可能不如 PHP 中的基本字符串操作快,但如果数据很多,数据库可能会更快。一个基本的选择查询(在我当前的默认桌面硬件上)大约需要 15 毫秒,缓存不到 1 毫秒,如果索引正确,这几乎与表中名称的数量无关。所以你的网站总是很快的。

  2. 数据库不会导致 StackOverflow 或内存不足错误并使您的网站崩溃(这在很大程度上取决于您的 PHP 设置和硬件)

  3. 数据库更加灵活,假设您想在创建第一个数据集后添加/删除/编辑名称。使用“INSERT INTO”、“DELETE FROM”和“UPDATE”来修改数据非常简单,比在代码中的某处编辑大约 100.000 个条目的字符串要好。

您的代码

  1. 你肯定需要改用MySQLi or PDO,代码可能是这样的:
$mysqli = new mysqli("host", "username", "password", "dbname"); $stmt = $mysqli->准备( '从表中选择字符串 WHERE 名称 = ?限制 1' ); $stmt->bind_param("s", $value); $stmt->执行(); $stmt->store_result(); $stmt->bind_result($string); $stmt->fetch(); $stmt->关闭();

这使用 MySQLiPrepared Statements (for security),而不是已弃用的 MySQL 扩展 (in PHP 5.5)

【讨论】:

  • 加上 OPs 第二种方法中的爆炸字符串到数组将是 100,000 个名称的显着开销;所以它会随着它的增长而变慢,而(正确索引的)数据库不会
  • 谢谢你,但如果我想使用 while 并获取 1000 号码的功能,数据库很糟糕?!简单代码:for($i = 0;$i < 1000; $i++) { find($i); }
  • 我不太明白你的问题,你说的“数据库很糟糕”是什么意思?
  • 我只是想知道为什么不接受任何问题并意识到@Mohammad 只有 45 声望......
猜你喜欢
  • 2013-06-15
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2011-05-06
相关资源
最近更新 更多