2

在 MySQL(使用 PHP)中哪个更有效/更好的实践/成本更低?SELECTing 两个单独的语句,UNION将它们组合成一个,或者我在网上找到的关于CREATEing 一个临时表作为 MySQL 等价物的其他东西SELECT INTO?或者你还能想到什么?

结果将在 PHP 脚本中使用。

查询:

  • 第一个SELECT(我们称之为查询 A)无论如何都会产生 10 行 4 列。
  • 第二个SELECT(查询 B)无论如何都会产生 1 行 4 列。

场景:

  • 如果我SELECT使用这两个语句,我将仅在以下情况下迭代查询 B Query A[0]->Col1 > 0:总共 2 个数据库查询 + PHP 处理。
  • 如果我UNION将两个语句放入查询 C 中,查询 B 将是第一行(Query C[0]是查询 B),而查询 A 将是第 2-11 行(Query C[1..10]是查询 A),我只会在以下情况下迭代第 2-11 行Query C[0]->Col1 > 0:总共 1 db 查询 + PHP 处理。

不可转让:

  • 无论如何,我都必须遍历查询 A。
  • 查询 A 的迭代取决于查询 B 的值。

少 1 个SELECT查询值得UNION操作吗?有没有更有效/更好的实践/成本更低的解决方案?我在这里缺少什么吗?提前致谢。

4

1 回答 1

3

这完全取决于环境和你的管理方式——我不得不说——其他一切。如果服务器位于地球另一端的另一个网络上,那么网络就是您的瓶颈。
为了进行更好的调用,我会做出一些假设:服务器位于 localhost 上,连接管理得当,而应该优化的只是查询本身。如果你是这种情况,你可以使用命令,这里Explain解释的用法非常简单:

Explain select col1 from table1 Union select col2 from table2

那里有大量文章为您解释如何使用Explain. 是一个。

最后一件事,重要的不仅仅是行数。您的选择代码也被执行多少次也很重要。假设您有一个循环,每次运行返回 11 行并且有 1000 次迭代。只需假设每次迭代中的行都不同,那么您将看到连接管理和缓存的效果。

于 2012-04-21T04:30:35.067 回答