gpt4 book ai didi

php - 哪个更快,使用更多 PHP 的大连接查询或使用更少 PHP 的多个小选择?

转载 作者:可可西里 更新时间:2023-11-01 07:02:36 25 4
gpt4 key购买 nike

我正在运行一个 cron 任务,该任务对 MySQL 服务器进行大量查询。最大的问题是服务器有时运行速度非常慢。

我有一个相对较大的查询,其中有 4 个表在它们之间进行了联接,还有 4 个较小的查询具有自然联接,它们也攻击第一个表。抛出这些查询后,我会处理结果并使用 PHP 对它们进行分组。

我计划以某种方式将这 5 个查询混合成一个大查询,然后让 PHP 在我需要时快速执行一些 sort()这样做。

我还被告知 MySQL 查询在过滤和排序方面比 PHP 运行得更快,但在谈论有 7 或 8 个时我有理由担心它左加入。有关这些查询的更多规范(由于公司政策,我无法复制):

  • 每个获取的行和字段将至少被访问一次。
  • 每个查询都基于一个主表和一些“翼”表运行。
  • 每个查询都使用相同的 GROUP BY 规则。
  • 目前 PHP 代码将一些二级查询结果拆分为多个数组。如果使用大型查询,它还应该按多个参数对结果进行排序。

因此,由于这些问题,也许根据经验:

哪个更快,使用更多 PHP 的大型连接查询还是使用更少 PHP 的多个小型选择?

最佳答案

根据经验,查询越少越好。将查询传递给 MySQL 会产生开销,无论查询多么复杂。然而,php 在某些方面的速度出奇地快,如果您不使用索引进行排序(如果您有效地对联合在一起的多个查询的结果进行排序,这听起来是可能的),则 php 中的排序性能可能相当甚至更好.

最大的区别在于您获取一个查询的结果,然后对第一个查询返回的每个行执行另一个查询。在这种情况下,查询的数量很容易迅速失控而不被注意。在工作中,我发现了一个菜单生成脚本,它有一个查询来获取高级菜单项,然后另一个查询每个高级菜单项来获取子菜单项。这很容易被重写为连接,但令人惊讶的是性能差异,生成菜单所需的时间从 0.2 秒下降到 0.002 秒。

但这是个案决定。我需要根据 levenshtein 计算值返回一些值(本质上是 2 个字符串的不同程度的分数)。使用 mysql 自定义函数这是可能的,并且大大减少了返回的行数,但速度很慢。 php levenshtein 函数要快得多,事实证明返回几倍多的行然后在 php 中处理它们以获得 levenshtein 值然后删除不再需要的记录会更有效。

在您描述的情况下,我怀疑差异可能很小。看起来您只会执行 4 个查询而不是 1 个更复杂的查询。但是,如果没有看到表结构和查询(遗憾的是您无法提供),则很难确定。执行单个合理的复杂查询但忽略不是绝对必要的排序,然后在 php 中执行它可能是有效的(使用用户定义的比较的 usort 可能对此很有用)。

还有一个问题是复杂的查询更难维护。虽然有很多人可以将 php 脚本结合在一起或可以理解简单的 SQL 查询,但能够理解复杂的 SQL 查询的人数少得令人担忧。

关于php - 哪个更快,使用更多 PHP 的大连接查询或使用更少 PHP 的多个小选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22708734/

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