我通常会在项目中尝试减少MySQL查询,然后使用PHP格式化数据。
我想知道更多的MySQL查询能否以正确的格式提供确切的数据,或者如果更好地获得我在单个查询中需要的所有内容,然后用PHP解析结果以获得数组I需要。
答案 0 :(得分:3)
在现代PHP中,封装是编写代码时的主要观点之一,如果你明确地不调用那些完成工作的方法,那么就不会执行一堆查询。
针对某些旧程序样式,您可以在一个页面中使用is ..()函数进行100次查询和测试,使用哪种查询,由于运行时编译,您的引擎会有很高的负载。
因此,您可以在很多查询中为自己提供尽可能多的条件,而不需要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) {
//...
}
谈论性能是主观的,关于查询数据库的方式和频率非常重要,因此以给定方式格式化数据的单个查询经常被重用,您将无法加载核心。
答案 1 :(得分:2)
根据经验......
通常,我遵循的规则是尽量减少您对某种持久性结构(如数据库)所做的请求数量。数据库请求非常快,但让语言操作内存中的结构通常会更快。它还取决于您的DBMS有多忙。还有其他人要求这张桌子吗?它只是你吗? 总是只是你在使用它吗?
如果你想......
您可以进行一些基准测试,并简单地计算两个线程完成所需的时间。一个有多个MySQL查询;一个单一的MySQL查询。如果您看到明显且一致的差异,那么您就得到了答案!