測試環境
| 項目 | Windows NT 4.0 (SP5) | BluePoint Linux 1.0 |
| CPU | Celeron 433 MHz | 同 |
| 記憶體 | 128 MB | 同 |
| 硬碟 | 20 GB | 同 |
| Web Server | Apache 1.3.12 | Apache 1.3.12 |
| PHP | 3.0.15 / 4.0 RC1 | 4.0 RC1 |
| MySQL | 3.22.29 | 3.22.32 |
| Oracle | 8.0.5 | 未安裝 |
測試資料表結構 (兩資料庫相同)
-- MySQL
CREATE TABLE board (
board_id SMALLINT(6) NOT NULL AUTO_INCREMENT,
board_name CHAR(16) NOT NULL,
board_manager CHAR(20),
PRIMARY KEY (board_id)
);
-- Oracle
CREATE TABLE board (
board_id NUMBER,
board_name CHAR(16) NOT NULL,
board_manager CHAR(20)
);
測試程式碼核心邏輯
MySQL (PHP 4)
$dblink = mysql_connect("localhost", "root", "pass");
mysql_select_db("bbs");
$query = "INSERT INTO board (board_name, board_manager) VALUES ('test', 'test')";
$begin = time();
for ($i = 1; $i <= 10000; $i++) {
mysql_db_query("bbs", $query);
}
$end = time();
echo "Total time: " . ($end - $begin) . " seconds";
Oracle (PHP 3 - 僅 PHP 3 支援 Oracle)
$conn = OCILogon("php_oracle", "php_oracle");
$stmt = OCIParse($conn, "INSERT INTO board (board_id, board_name, board_manager) VALUES (:id, 'test', 'test')");
OCIBindByName($stmt, ":id", $i, 32);
$begin = time();
for ($i = 1; $i <= 10000; $i++) {
OCIExecute($stmt);
}
$end = time();
echo "Total time: " . ($end - $begin) . " seconds";
測試結果
| 環境 | PHP 版本 | 資料庫 | 10,000 筆 INSERT 耗時 |
| Win32 + Apache | PHP 4 | MySQL | 28 秒 |
| Win32 + Apache | PHP 3 | Oracle | 未提供 (文中斷) |
| Linux | PHP 4 | MySQL | 未提供 (文中斷) |
作者結論與補充
- 測試僅涵蓋 INSERT 操作,未測試 SELECT 效能。
- Win32 下 PHP 4 當時不支援 Oracle,故無 PHP 4 + Oracle 數據。
- Linux 下未安裝 Oracle,無對比數據。
- 預期 PHP 4 正式版釋出後,Oracle 連接效能會有提升。
- 測試程式碼已排除連線建立、SQL 解析等開銷,僅計算執行迴圈時間。
現代視角補充
此測試為 2000 年代初期數據,**僅具歷史參考價值**。現代環境下:
- MySQL 8.0 / MariaDB 10 + PHP 8 + PDO + Prepared Statements + 連線池,單核心可輕鬆達到 10 萬+ INSERT/秒 (批次插入)。
- Oracle 19c/21c + OCI8/PDO_OCI 同樣具極高效能,架構不同 (共用伺服器/專用伺服器) 影響較大。
- 效能差異多取決於 **索引設計、交易控制、批次大小、網路延遲、儲存引擎/表空間配置**,而非單純資料庫品牌。