PDO fetch语句之间是否存在性能差异?

22 php pdo fetch

/* Exercise PDOStatement::fetch styles */
print("PDO::FETCH_ASSOC: ");
print("Return next row as an array indexed by column name\n");
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
print("\n");

print("PDO::FETCH_BOTH: ");
print("Return next row as an array indexed by both column name and number\n");
$result = $sth->fetch(PDO::FETCH_BOTH);
print_r($result);
print("\n");

print("PDO::FETCH_LAZY: ");
print("Return next row as an anonymous object with column names as properties\n");
$result = $sth->fetch(PDO::FETCH_LAZY);
print_r($result);
print("\n");

print("PDO::FETCH_OBJ: ");
print("Return next row as an anonymous object with column names as properties\n");
$result = $sth->fetch(PDO::FETCH_OBJ);
print $result->NAME;
print("\n");
Run Code Online (Sandbox Code Playgroud)

那么默认是FETCH BOTH,我想知道当我要获取大量数据时FETCH ASSOC是否更快; 或者他们是一样的?

谢谢

Gat*_*ler 41

我想知道这个问题的答案,所以我写了一个快速的基准脚本.

我建议您在自己的服务器上运行此基准测试,但是,对于单行结果,这是我的设置的典型结果:

  1. PDO :: FETCH_ASSOC - 936 ms
  2. PDO :: FETCH_BOTH - 948 ms
  3. PDO :: FETCH_NUM - 1,184 ms
  4. PDO :: FETCH_OBJ - 1,272 ms
  5. PDO :: FETCH_LAZY - 1,276毫秒

对于大型数据集,这些结果是典型的:

  1. PDO :: FETCH_LAZY - 5,490毫秒
  2. PDO :: FETCH_NUM - 8,818 ms
  3. PDO :: FETCH_ASSOC- 10,220 ms
  4. PDO :: FETCH_BOTH - 11,359 ms
  5. PDO :: FETCH_OBJ - 14,027 ms

请参阅git hub上的注释,获取所有行确实会更改测试.


Sjo*_*erd 2

ASSOC、BOTH 和 OBJ 通常是相同的,只是它们返回不同的结构。那里没有性能差异。

LAZY 执行某种延迟加载。PDO::FETCH_LAZY 在访问对象变量名称时创建它们。这意味着只有在访问属性时才会受到性能损失,而在调用 fetch() 时则不会。如果您仅使用返回数据的一部分,这非常有用。

  • 是否有延迟加载会降低性能的情况? (2认同)