2013-06-07 6 views
6

Sto lavorando su PHP su concetto di programmazione orientata agli oggetti, Questa è la classe denominata 'Connect', che si collega al database e inserisce anche la richiesta in database_Sto sprecando il tempo di server se chiamo un metodo per ogni richiesta di inserimento

class connect(){ 
     public function insert($column, $value) 
      { 
      $insert = mysqli_query($this->con, "INSERT INTO $tablename ($column) 
    VALUES ('$value')"); 
      }/* end of insert method */ 
}/* end of class 'connect' */ 

tutto quello che voglio sapere che se inserisco ogni volta chiamando il metodo 'insert' per ogni richiesta, sarà una perdita di tempo o sprecare più tempo del server ?, o dovrei solo fare un solo metodo per l'inserimento tutta la richiesta alla volta ?;

$call = new connect("localhost", "root", "", "facebook","fb1"); 
$call->insert("username", "testInsert141"); 
$call->insert("username", "testInsert141"); 
$call->insert("username2", "testInsert142"); 
$call->insert("username3", "testInsert143"); 
+1

è possibile inserire più righe alla volta. Quindi devi ottenere ogni set di valori alla volta ed eseguire la query di inserimento solo una volta. Rif: [link] (http://stackoverflow.com/questions/7977172/mysql-multiple-insert-performance) –

+2

Sono confuso dal termine "richiesta". Sono richieste AJAX nella stessa pagina? Sono HTTP ottenere richieste su nuove pagine servite? Per quanto riguarda l'esecuzione SQL, non fa molta differenza se stai usando un'esecuzione di un inserto o molti (eccetto se sono centinaia di migliaia, cosa che credo, non è il caso). Ciò che importa di più è la connessione, che richiede del tempo per essere creata e distrutta. Potresti usare un pool di connessioni. Ciò farebbe risparmiare tempo al server, ma ancora una volta, solo se il numero di transazioni è rilevante. – aldux

+0

so che posso inserire più, ma se uso il codice di cui sopra; rallenterebbe o richiederebbe più tempo per elaborare ????? –

risposta

6

Presumo ti riferisci il fatto che chiamare una funzione può essere "costoso", rispetto al dumping di tutti i comandi in un file enorme.

Fondamentalmente sì, ci vorrà più tempo (in teoria). Dovresti preoccuparti di questa volta? No.

Ciò di cui dovresti preoccuparti sono le parti del tuo codice che effettivamente hanno un impatto sul consumo di tempo. Nel tuo esempio, l'inizializzazione di mysql probabilmente impiegherà il 90% del tempo di elaborazione, se non di più. Dovresti quindi assicurarti di connetterti a mysql solo una volta.

Inoltre, la query di inserimento può essere più veloce sul lato mysql, quando si invia una singola query per eseguire tutti gli inserimenti. Tuttavia, anche questo è probabilmente trascurabile. Il modo migliore per determinarlo è testare e profilare il tuo codice.

Bottom line - dovresti preoccuparti di rendere il tuo codice leggibile e mantenibile prima di tutto. Quindi effettuare il profiling dopo aver individuato i veri colli di bottiglia.

3

Il tuo modo sarà più lento contro una query.

vedere questo test http://blog.cnizz.com/2010/05/31/optimize-mysql-queries-fast-mutliple-row-inserts/

UPDATE:

prova mysqli:

<?php 
$s = microtime(true); 
$mysqli = new mysqli("127.0.0.1", "root", "pass", "test", 3306); 
for($i=0;$i<1000;$i++){ 
    $mysqli->query("INSERT INTO admin SET name='hello world'"); 
} 
$e = microtime(true); 
echo $e-$s; 
?> 

28,007468938828 - INNODB

0,19577789306641 - MYISAM

<?php 
$s = microtime(true); 
$mysqli = new mysqli("127.0.0.1", "root", "pass", "test", 3306); 
$sql = "INSERT INTO admin (`name`) VALUES "; 
for($i=0;$i<1000;$i++){ 
    $sql.= "('hello world'),"; 
} 
$sql = substr($sql,0,-1); 
$mysqli->query($sql); 

$e = microtime(true); 

echo $e-$s; 
?> 

0,06469202041626 - INNODB

0,052706003189087 - MYISAM

(testato su Athlon X2 2.7MHz)

e Intel I3 2.4MHz circa lo stesso punteggio

+0

Ouch .. quell'articolo è così fuorviante e completamente scorretto che fa male. Inoltre, viene rivelato un grande mistero: perché le persone usano ancora le funzioni di 'mysql_': è a causa di articoli di merda e del diritto di tutti di avere un blog. –

+0

hai ragione, quindi l'ho provato con mysqli –

+0

No, l'intero _point_ dell'articolo è estremamente fuorviante. Sì, una grande query supererà x quelle piccole. Perché? Perché mysql eseguirà il lex una volta una query, opposto a lessarlo 10 volte. Ecco perché le persone intelligenti hanno inventato dichiarazioni preparate. L'altra cosa è testare con MyISAM - mentre MyISAM ha i suoi scopi, non sta ancora offrendo transazioni. Fare inserimenti analizzando csv e inserendolo è HUGELY più efficiente se si avvolgono 100 query in una singola transazione. In pratica, MySQL esegue 100 scritture in un singolo I/O. Ci sono troppe cose sbagliate in quel "benchmark". –

Problemi correlati