Archivi tag: speed

Il driver di rete bridged Virtualbox rallenta la velocità della LAN

Quando sono passato dal WiFi ad una connessione fisica con cablaggio CAT5E dal router nell’altra stanza a questo PC, sono saltato da velocità di trasferimento dei file di massimo 2-3MB/s (ma quasi sempre 1MB/s, spesso meno) a 11-12MB/s.

Ultimamente ho notato come la velocità per scaricare alcuni fansub dal server domestico era scesa a 5-6MB/s, esattamente la metà di quella a cui ero abituato; dall’icona di rete nell’area di notifiche di Windows 7 ho notato che era presente un secondo adattatore di rete, che ho fatto risalire alla scheda virtuale di rete in modalità bridged installata da Virtualbox. Siccome l’avevo recentemente installato per testare una cosa di cui ora non ho più bisogno, ho disinstallato Virtualbox, e non appena il driver dell’adattatore di rete virtuale è stato rimosso, la velocità tornata a 11-12MB/s.

Questo dovrebbe essere un comportamento normale?

Una query MySQL SELECT con numerose condizioni WHERE è più veloce

Per un certo motivo volevo aggiungere più condizioni WHERE ridondanti all’interno di una query MySQL SELECT, ma temevo di rallentare l’esecuzione della stessa.

In breve, sto lavorando a questo sito di annunci, dove per ogni oggetto c’è una tabella contenente tra le altre le righe comune_id, provincia_id e regione_id. Conoscendo il valore di comune_id, è possibile usare la query:

SELECT * FROM oggetti WHERE comune_id='12'

invece di:

SELECT * FROM oggetti WHERE comune_id='12' AND provincia_id='34' AND regione_id='56'

siccome i risultati sono gli stessi… ma conviene?

Ho preparato un veloce test:

include "db.inc.php";
$creationstart=strtok(microtime()," ")+strtok(" ");
for($i=0;$i<=999;$i++)
 $test=doquery("SELECT * FROM oggetti WHERE comune_id='58003'");
$creationend=strtok(microtime()," ")+strtok(" ");
$creationtime=number_format($creationend-$creationstart,4);
echo "solo comune: $creationtime<br />";

$creationstart=strtok(microtime()," ")+strtok(" ");
for($i=0;$i<=999;$i++)
 $test=doquery("SELECT * FROM oggetti WHERE comune_id='58003' AND provincia_id='58' AND regione_id='12'");
$creationend=strtok(microtime()," ")+strtok(" ");
$creationtime=number_format($creationend-$creationstart,4);
echo "tutti i parametri: $creationtime<br />";

A sorpresa, ci è voluto un tempo variabile dai 2.4s ai 4.5s per eseguire le 1000 iterazioni con “tutti i parametri”, mentre la versione “solo comune” richiedeva circa 0.4s in più. All’inizio ho pensato che si trattasse della cache MySQL in azione, ma invertendo la posizione delle due routine all’interno del codice i risultati sono rimasti gli stessi.

Quindi, anche se vi sembra ridondante, aggiungere più clausole WHERE ... AND ... nelle vostre query accelera l’esecuzione della ricerca.

This article has been Digiproved