2010-03-12 25 views
5

Recentemente stavo passando per un blog e ho notato alcuni punti sull'utilizzo di PDO in mysql e ha cambiato la mia opinione sul PDO. I punti sono:PDO in prestazioni mysql

  1. istruzioni preparate nativi non possono sfruttare la cache delle query, con conseguente prestazioni inferiori.

  2. istruzioni preparate nativi non possono eseguire certains tipi di query, come "MOSTRA tabelle"

  3. Native preparato dichiarazioni non comunicano correttamente le lunghezze delle colonne per alcune altre query "MOSTRA", con conseguente risultati alterati.

  4. Chiamando le stored procedure più volte utilizzando istruzioni preparate in modo nativo, la connessione viene interrotta.

Qualcuno può commentare questo per favore?

Volevo cache di query nella mia app web. Mi sto preparando a spostare la mia app Web per utilizzare PDO dopo aver considerato i problemi di prestazioni con il mio sito web. Qualcuno può suggerirmi?

Grazie in anticipo.

+1

Dovresti aver aggiunto il link a quel blog che credo sia [questo] (http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/). L'autore ha chiarito che "Quando ho scritto questo nel 2006, sì, era vero" e "Non ho idea se questo sia stato successivamente risolto o meno - lo spero dopo diversi anni". quando qualcuno ha sottolineato che il primo punto è sbagliato. Quindi la risposta accettata di seguito potrebbe non essere più applicabile ora. –

risposta

5

Bene

  • siete di destra per il primo punto
  • lo spettacolo e MOSTRA tabelle sono comandi non comunemente utilizzati nella maggior parte dei casi d'uso
  • Iam utilizzando statemends preparati in combinazione con le stored procedure e non hanno ancora sperimentato tali problemi.

è possibile utilizzare il seguente comando per consentire query nella cache:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); 

Questo comando è disponibile da PHP 5.1.3 su un solo.

2

Le dichiarazioni preparate utilizzati cache delle query, ma ha condizioni:

Dal 5.1 Doc:

Befor e MySQL 5.1.17, le istruzioni preparate non utilizzano la cache delle query. Cominciando con 5.1.17, istruzioni preparate usa il cache delle query in determinate condizioni, che variano a seconda del metodo di preparazione:

  • dichiarazioni che sono emessi utilizzando il protocollo binario utilizzando mysql_stmt_prepare() e mysql_stmt_execute().
  • Dichiarazioni emesse utilizzando il protocollo di testo (non binario) utilizzando PREPARE ed EXECUTE. Vedere la Sezione 12.6, "Sintassi SQL per le istruzioni preparate".

Che il Doc 5.5 ribadisce come: dichiarazioni

preparati che vengono emessi utilizzando il protocollo binario utilizzando mysql_stmt_prepare() e mysql_stmt_execute(), sono soggetti a limitazioni di memorizzazione nella cache. Il confronto con le istruzioni nella cache della query si basa sul testo della dichiarazione dopo l'espansione di? marcatori di parametri. L'istruzione viene confrontata solo con altre istruzioni memorizzate nella cache che sono state eseguite utilizzando il protocollo binario. Cioè, ai fini della cache di query, le istruzioni preparate emesse utilizzando il protocollo binario sono distinte dalle istruzioni preparate emesse utilizzando il protocollo di testo.

+0

"Prima di MySQL 5.1.17, le istruzioni preparate non utilizzano la cache delle query. A partire da 5.1.17, le istruzioni preparate utilizzano la cache delle query in determinate condizioni, che variano in base al metodo di preparazione: ... Dichiarazioni emesse utilizzando il protocollo binario usando mysql_stmt_prepare() e mysql_stmt_execute() " – thomasrutter

+0

@thomasrutter - Buona idea di citare il documento piuttosto che semplicemente collegarlo ad esso. Ho aggiunto la documentazione per essere più utile – SeanDowney

+0

Ci sono anche alcune qualifiche sotto quel testo - ad esempio, il caching viene fatto dopo l'espansione di "?" parametri, e ci sono un paio di cose da notare a seconda che tu usi PREPARE ed EXECUTE o se usi le funzioni API prepare() ecc. – thomasrutter

Problemi correlati