似乎有些基准测试是有序的。
我整理了一些脚本来测试将数据存储为 PHP 数组、CSV 文件以及通过 PDO 访问的 MySQL DB。
阵列测试
这里是数组测试的脚本:
array-inc.php:
$data = array(
array(
"key" => "something",
"value" => "something else"
),
array(
"key" => "something",
"value" => "something else"
),
array(
"key" => "something",
"value" => "something else"
),
array(
"key" => "something",
"value" => "something else"
),
array(
"key" => "something",
"value" => "something else"
)
);
array-test.php
$start = microtime( TRUE );
for( $i = 0; $i < 10000; ++$i ) {
include( "array-inc.php" );
$retrieve = $data[2];
}
$finish = microtime( TRUE );
print $finish - $start;
CSV 测试
以下是 CSV 测试的脚本:
值.csv:
key,value
something,something else
something,something else
something,something else
something,something else
something,something else
csv.php:
$start = microtime( TRUE );
for( $i = 0; $i < 10000; ++$i ) {
$fp = fopen( "values.csv", "r" );
$data = array();
while(( $line = fgetcsv( $fp )) !== FALSE ) {
$data[] = $line;
}
$retrieve = $data[2];
}
$finish = microtime( TRUE );
print $finish - $start;
MySQL 测试
这里是MySQL测试的脚本(表有id、key、value列,五行和值与上面两列相同):
mysql.php:
$start = microtime( TRUE );
for( $i = 0; $i < 10000; ++$i ) {
$query = "SELECT * FROM `values` WHERE id = :id";
$result = $pdo->prepare( $query );
$result->execute( array( ":id" => 2 ));
$retrieve = $result->fetch( PDO::FETCH_ASSOC );
}
$finish = microtime( TRUE );
print $finish - $start;
每一个都设置为从存储的数据中访问一个元素,并循环处理 10,000 次,以便更准确地测量时间。结果如下:
我对这些测试中的每一个运行了 3 次,并收到了以下值:
似乎 CSV 是明显的输家,但 Array 和 MySQL 非常接近,而 Array 可能在性能上略微领先。随意调整上面的代码,以提供更符合您的环境的结果。