有没有办法加快产生大量数据的mysqli查询?

时间:2014-12-18 01:35:16

标签: php mysqli

我的PHP代码中有一个查询,它返回大约25,000行,其中有6列数据来自4个不同的表。然而,这正在制造一个主要的瓶颈。在以下代码中,store_result()大约需要20秒才能执行:

$stmt = $mysqli->prepare($query);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($var0, $var1, $var2, $var3, $var4, $var5);
while($stmt->fetch()) {
    $rows[] = array(
        'field0' => $var0,
        'field1' => $var1,
        'field2' => $var2,
        'field3' => $var3,
        'field4' => $var4,
        'field5' => $var5,
    );
}

我还尝试了相同的查询而没有做好准备:

$stmt = $mysqli->query($query);
$rows = array();
while($row = $stmt->fetch_assoc()) {
    $rows[] = $row;
}

但我没有看到任何改善;而不是store_result()花了20秒,query()花了20秒而不是。

因为减速来自store_result()而不是execute(),所以优化查询本身会有帮助吗?如果没有,有没有人有任何其他建议?或者我只是想传输大量数据并且没有任何帮助吗?

请注意,我无法访问mysqlnd,我只需运行一次查询,并且没有任何需要转义的用户输入,如果这与任何建议的解决方案相关。

2 个答案:

答案 0 :(得分:1)

我的第一个猜测是缺乏适当的索引。您是否尝试过EXPLAIN您的查询?

您需要提供更多背景信息才能获得更好的答案:

  • 查询是什么?
  • 4张桌子的结构是什么?
  • 一个选定行的大概大小是多少(几个字节对比 兆字节的blob / text)?
  • mysql数据库与php脚本位于同一服务器上吗?
  • 如果数据库服务器和php服务器在两台不同的机器上, 它们之间的带宽是多少?

答案 1 :(得分:0)

查询优化是关键。第一步是确保您的查询在您有效利用密钥的意义上是稳定的。正确使用索引也可以加快查询速度。