我通常会尝试在我的项目中减少 MySQL 查询,然后使用 PHP 格式化数据。
我想知道更多的 MySQL 查询是否会更好,这些查询可以为我提供正确格式的确切数据,或者是否更好地在单个查询中获取我需要的所有内容,然后使用 PHP 解析结果以获得我需要的数组。
在现代 PHP 中,封装是编写代码时的要点之一,如果您明确不调用执行工作的方法,则不会执行一堆查询。
对于一些旧的程序风格,您可以在一页中进行 100 个查询并使用 is..() 函数进行测试,使用哪个查询,由于运行时编译,您的引擎将有很高的负载。
因此,您可以在大量查询中为自己提供尽可能多的条件,并使用更少的 PHP 来测试它。
让我们举个小例子。
假设您有一个模型,用于名为“Article”的项目。您希望通过 id、作者或姓名进行搜索。有这个没有错:
public function getArticleById($id) {
$sql = "SELECT id, name, author FROM article WHERE id = $id";
$query = $this->db->query($sql);
$result = $this->db->fetch($query);
return $result; //assuming you have query and fetch method, where the last one return an array/object
}
public function getArticleByName($name) {
$sql = "SELECT id, name, author FROM article WHERE name = $name";
$query = $this->db->query($sql);
$result = $this->db->fetch($query);
return $result;
}
public function getArticleByAuthor($author) {
$sql = "SELECT id, name, author FROM article WHERE author = $author";
$query = $this->db->query($sql);
$result = $this->db->fetch($query);
return $result;
}
取决于你想要什么,你可以使用这些方法之一。我通常假设,您可以在多个页面中重用这些方法返回的信息,因为它返回例如单个文章所需的全部信息。另一方面,我假设您使用了一些不好的做法,例如,如果article
有一个DateTime
字段,并且您在 3 个不同格式的页面中使用它 - 那么您每次使用时都需要 PHP 重新格式化日期时间该方法返回信息,如果您有 3 个查询,它会返回不同格式的日期时间,这将是完全矫枉过正的。
此外,总的过度杀伤是请求整个表,并使用 PHP 过滤信息,而不是WHERE
:
public function getArticle() {
$sql = "SELECT id, name, author FROM article";
$query = $this->db->query($sql);
$result = $this->db->fetch($query);
return $result;
}
//...
foreach ($model->getArticle() as $article) {
if ($article['name'] == $name) {
//...
}
谈论性能是主观的事情,查询数据库的方式和频率真的很重要,因此以给定方式格式化数据的单个查询被重复使用足够频繁,你不会加载你的核心。
根据经验..
通常,我遵循的规则是尽量减少您对某种持久结构(如数据库)发出的请求数量。数据库请求非常快,但让语言在内存中操作结构通常更快。这还取决于您的 DBMS 有多忙。有其他人从这张桌子上请求吗?只有你吗?永远只有你在使用它吗?
如果你想..
您可以进行一些基准测试,并简单地计算两个线程完成所需的时间。一个具有多个 MySQL 查询;一个与单个 MySQL 查询。如果您看到明显且一致的差异,那么您就有了答案!