从mysql数据库读取时间的复杂性

时间:2010-12-10 18:20:08

标签: php mysql optimization

我想知道,thory中的代码需要更长的时间:

1

$query = "SELECT Something1, Something2 FROM base WHERE SomeCondition";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
//We do something with $row[0] and row[1]
}

2

$query = "SELECT Something1 FROM base WHERE SomeCondition";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
//We do something with $row[0]
}
$query = "SELECT Something2 FROM base WHERE SomeCondition";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
//We do something with $row[0]
}

现在1.应该更快,因为虽然statment在O(n)时间内执行,而另一个在O(2 * n)中执行,但在第一个中它必须一次查询两列,其中2它必须查询一列,但两次。现在我想知道一个列上的mysql_query和mysql_fetch_array是一次性的,还是一次性的两列?

2 个答案:

答案 0 :(得分:1)

第一个选项(单个查询)在给定的示例中运行速度快〜2倍。

您可能认为,因为数据库瓶颈通常是I / O,速度应该相同(从磁盘读取x数据或读取x / 2数据的2 x),但由于记录的写入方式对于文件系统以及文件系统只能读取离散块的事实,与读取多列相比,只读取一列并不是更快(根据RDBMS的不同,只有当你有多列的表时才会显示差异)或者如果磁盘I / O不是瓶颈,但是例如你通过非常慢的WAN访问数据库。)

运行一个查询的其他好处是(虽然与上述相比较小):

  • 查询计划程序需要分析每个查询并确定它将如何执行它
  • 将每个查询发送到服务器都有开销

答案 1 :(得分:0)

一般来说,你会希望使用PHP上的数据库引擎来做任何事情,因为前者通常会针对这些事情进行优化。 MySQL在搜索和检索数据方面比PHP更快,这就是我们首先使用它的原因。

此外,虽然最小,但网络连接和套接字的开销无论如何都会使第一个解决方案更快。