gpt4 book ai didi

php - 使用 PHP 多次查询 mysql 数据库的最有效方法是什么?

转载 作者:行者123 更新时间:2023-11-29 04:44:45 25 4
gpt4 key购买 nike

我正在尝试找出使用 PHP 将多个查询发送到 MySQL 数据库的最有效方法。现在我正在做两个单独的查询,但我知道有更有效的方法,比如使用 mysqli_multi_querymysqli_multi_query 是最有效的方法还是有其他方法?

例如,我可以编写一个查询,将数据库中所有表中的所有数据放入一个 PHP 数组中。然后我可以使用 PHP 对数据进行排序,结果无论我需要什么数据都只有一个查询......我可以将该 PHP 数组放入一个 session 变量中,这样用户就不会在该 session 期间再次查询数据库。有道理吗?为什么不直接这样做,而不是在每次重新加载页面时都创建一个新查询?

很难找到这方面的资源,所以我只是在寻求建议。我计划在我正在构建的网站上拥有大量流量,因此我需要代码尽可能减少对服务器的压力。就表大小而言,我们谈论的是最大表中的 3,000 行。将它存储到一个大的 PHP 数组中是否可行(优点是客户端在页面加载时只查询一次数据库)?

$Table1Array = Array();
$Table1_result = mysqli_query($con,"SELECT * FROM Table1 WHERE column1 ='" . $somevariable . "'");
while($row = mysqli_fetch_array($Table1_result))
{


$Table1Array[] = $row;

}


// query 2
$Table2Array = Array();
$Table2_result = mysqli_query($con,"SELECT * FROM Table2 LIMIT 5");
while($row = mysqli_fetch_array($Table2_result))
{


$Table2Array[] = $row;

}

最佳答案

这里有一些事情要解决,希望这会有意义/具有建设性...

Is mysqli_multi_query the most efficient method or are there other means?

这取决于您尝试为给定页面/查询执行的操作的细节。不过一般来说,使用 mysql_multi_query 不会为您带来太多性能,因为 MySQL 仍会一个接一个地执行您提供的查询。 mysql_multi_query 的性能提升来自于 PHP 和 MySQL 之间更少的往返。如果两者位于不同的服务器上,或者您正在一个接一个地执行 1000 次查询,这是一件好事。

For example, I could just write a query that puts ALL the data from ALL the tables in the database into a PHP array.

只是。不。理论上您可以,但除非您有一个页面可以同时显示所有 数据库内容,否则根本没有必要。

Then I could sort the data using PHP

如果您可以使用 MySQL 将数据排序/过滤成正确的形式,那就去做吧。操作数据集是 MySQL 非常擅长的事情之一。

Why not just [load everything into the session] rather than create a new query each time the page is reloaded?

因为数据集会很大,每次客户端向您的服务器发出请求时, session 数据都会从客户端传输。除了发送不必要的大量请求之外,这种方法还会带来其他挑战吗? IE。如果自从您为该特定用户创建基于 session 的缓存后,额外​​的数据已添加到数据库中,您会怎么做?如果数据量对于用户 session 来说太大了怎么办?如果我拒绝您的 session cookie 并因此强制对每个 请求执行怪物查询,我作为用户会有什么体验?

I plan to have massive traffic on the site that I am building

我们都不要!正如上面的评论所暗示的,过早的优化是一件坏事。在此阶段,您应该集中精力获取您的 domain logic确定并构建一个良好的、可维护的 OO 平台,以此作为进一步开发的基础。

关于php - 使用 PHP 多次查询 mysql 数据库的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com