我正在開發一個用於在多個巨型數組上進行強烈計算的算法。現在我已經使用PHP數組來完成這項工作,但它似乎比我所需要的要慢。我正在考慮使用MySQLi表並將php數組轉換爲數據庫行,然後開始計算以解決速度問題。MySQLi查詢vs PHP Array,哪個更快?
在第一步,當我將一個20 * 10的PHP數組轉換爲200行數據庫時,需要很長時間。下面是代碼:(基本上下面的代碼是生成零矩陣,如果你有興趣知道)
$stmt = $mysqli->prepare("INSERT INTO `table` (`Row`, `Col`, `Value`) VALUES (?, ?, '0')");
for($i=0;$i<$rowsNo;$i++){
for($j=0;$j<$colsNo;$j++){
//$myArray[$j]=array_fill(0,$colsNo,0);
$stmt->bind_param("ii", $i, $j);
$stmt->execute();
}
}
$stmt->close();
的註釋的線「$ myArray的[$ J] = array_fill(0,$ colsNo ,0);」會在下兩行填寫表格時非常快速地生成陣列,花費更長的時間。
陣列時間:0.00068秒
的MySQLi時間:25.76秒
還有很多更計算剩餘的和我甚至修改許多部位後,可能變得更糟擔心。我搜索了很多,但我無法找到任何答案是否數組是一個更好的選擇或MySQL表?有沒有人完成或瞭解關於此的任何基準測試?
我真的很感激任何幫助。
在此先感謝
UPDATE:
我做了以下測試了273 * 273的矩陣。我爲相同的數據創建了兩個版本。第一個是二維PHP數組,第二個是273 * 273 = 74529行的表格,它們都包含相同的數據。以下是從這兩個[在這裏找出某列的哪一列的值等於1 - 其他列是零]的相似數據的速度測試結果:
- 花了0.00021秒爲陣列。
- 爲mysqli表花了0.0026秒。 (慢10倍以上)
我的結論是堅持數組而不是將它們轉換成數據庫表。
最後要說的是,如果所提到的數據首先存儲在數據庫表中,那麼生成一個數組然後使用它會慢得多,如下所示(由於從數據庫中檢索數據,所以速度較慢) :
- 該陣列耗時0.9秒。 (慢了400多倍)
- mysqli表花了0.0021秒。
知道的唯一方法就是做自己的基準測試。可能值得託管它在EC2上說,然後編寫一個API來按需要推拉數據庫,您可以在適當的硬件軟件上運行它,支付使用費用 – 2013-05-08 00:05:19
爲了公平比較,您應該批量插入數組比逐行插入更快。但@Dagon提到的正確方法是自己測試。你有性能測試作爲你的問題的標籤,所以做一些性能測試。 – 2013-05-08 00:18:24
影響此類性能的因素數量非常巨大,只需通過調整一些數據庫索引就可以將腳本運行時間縮短一小時。 – 2013-05-08 00:27:26