2014-12-03 47 views
0

我正在連接到Oracle數據庫11g企業版版本11.2.0.3.0 - 64位。爲什麼使用pdo_oci比使用oci8查詢執行速度更快?

連接php 5.6.3(xampp安裝)。

簡單的查詢執行與pdo_oci是即時的。

oci8需要5秒。

對於PDO_OCI,我使用延長php_pdo_oci.dll

對於OCI8,我使用延長php_oci8_12c.dll

我已經安裝了Oracle instantclient_12_1。

下面是PDO_OCI代碼:

$hote = '123.456.789.3'; 
$port = '1521'; 
$service = 'blabla.blabla-db.blabla'; 
$user = '12345'; 
$pass = '12345'; 

$lien_base = 
"oci:dbname=(DESCRIPTION = 
(ADDRESS_LIST = 
    (ADDRESS = 
     (PROTOCOL = TCP) 
     (Host = ".$hote .") 
     (Port = ".$port.")) 
) 
(CONNECT_DATA = 
    (SERVICE_NAME = ".$service.") 
) 
)"; 

try 
{ 
    $connexion = new PDO($lien_base, $user, $pass); 
} 
catch (PDOException $erreur) 
{ 
    echo $erreur->getMessage(); 
} 

$num_notice = "030000002"; 
$notice = $connexion->query("SELECT * FROM UDQ01.Z13U WHERE Z13U_REC_KEY = ".$connexion->quote($num_notice)."")->fetch(); 

echo '<pre>' . print_r($notice,1) . '</pre>'; 

而對於OCI8代碼:

$conn = oci_connect('12345', '12345', '123.456.211.3:1521/blabla.blabla-db.blabla.ca'); 
$query = 'SELECT * FROM UDQ01.Z13U WHERE Z13U_REC_KEY = 030000002'; 
$stid = oci_parse($conn, $query); 
oci_execute($stid, OCI_NO_AUTO_COMMIT); 

$row = oci_fetch_array($stid, OCI_ASSOC); 

echo '<pre>' . print_r($row,1) . '</pre>'; 

oci_free_statement($stid); 
oci_close($conn); 

爲什麼與OCI8這麼慢?

感謝,

帕特里克

+0

也許其中一個測試命中查詢緩存,而另一個則在數據庫「冷」時運行。 – GolezTrol 2014-12-03 21:25:16

+0

不,它總是比pdo_oci更快。 – trogne 2014-12-03 21:27:40

回答

0

的問題是在查詢:

應該有 '價值之間,如:

$query = "SELECT * FROM UDQ01.Z13U WHERE Z13U_REC_KEY = '030000002'"; 

的' 是隱含的與PDO_OCI查詢:

"SELECT * FROM UDQ01.Z13U WHERE Z13U_REC_KEY = ".$connexion->quote($num_notice)."" 

所以pdo_oci和oci8同樣快。

相關問題