Bonjour, afin d'optimiser un serveur j'ai voulu tester l'efficacité du moteur MEMORY de mysql et je suis assez déçu.

La mémoire va tout de même beaucoup beaucoup plus vite qu'un disque dur, je ne comprend pas qu'on ne retrouve pas cette différence avec le moteur MEMORY.

Je gagne que 10% de temps, voir au mieux 20%, cela vous parait il normal ?

voici le test que j'ai fait qui permet d'ecrire et lire une table de test:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
//**************************
//**************************
// *** PARAMETRAGES
$enregistrement_max = 10000;
$requete_max = 10;
$base = "engine_test";
$table_temp = "table_test";
$engine_array = array("ENGINE = MYISAM","ENGINE = MEMORY");
//$engine = "ENGINE = MYISAM";
//**************************
//**************************
foreach($engine_array as $engine)
{
print "<br>ENGINE => ".$engine;
$t1 = mktime();
 
//*******************
mysql_query("DROP DATABASE $base");
mysql_query("CREATE DATABASE $base") or die(mysql_error());
//*******************
 
//$table_source = "20090130_produit_pamimu";
 
 
mysql_db_query($base,"DROP TABLE `$table_temp`"); 
 
 
 mysql_db_query($base,"CREATE TABLE `$table_temp` (
`id` INT( 7 ) NOT NULL ,
`x` INT( 15 ) NULL ,
`y` INT( 15 ) NULL ,
`z` INT( 15 ) NULL ,
`o` INT( 15 ) NULL ,
INDEX (
`id`
)
) $engine ") or die(mysql_error());
 
 
 
 
// *** On rempli la base avec des valeurs quelconques
$id = 0;
$enregistrement_max_i = $enregistrement_max;
while($enregistrement_max_i > 0)
 {
 $id++;
 $x = rand(1000000,9000000);
 $y = rand(1000000,9000000);
 $z = rand(1000000,9000000);
 $o = rand(1000000,9000000);  
 mysql_db_query($base,"INSERT INTO `$table_temp` (id,x,y,z,o) VALUES ('$id','$x','$y','$z','$o')") or die(mysql_error());
 $enregistrement_max_i--;
 }
 
 
 
 
$t2=mktime();
//print '<br>timestamp = '.$t2;
print '<br>ecart='.($t2-$t1);
$requete_max_i = $requete_max;
while($requete_max_i > 0)
 {
 $update_req = mysql_db_query($base,"SELECT * FROM `$table_temp`") or die(mysql_error());
 while($update_data = mysql_fetch_array($update_req))
 {
 $u_x = rand(1000000,9000000);
 $u_y = rand(1000000,9000000);
 $u_z = rand(1000000,9000000);
 $u_o = rand(1000000,9000000);  
 mysql_db_query($base,"UPDATE `$table_temp` SET x = '$u_x', y = '$u_y', z= '$u_z', o = '$u_o' WHERE id ='$update_data[id]'") or die(mysql_error());
 $enregistrement_max_i--;
 }
 
 
 $requete_max_i--;
 }
// TEST CONTROLE
$test_req = mysql_db_query($base,"SELECT * FROM `$table_temp` WHERE id='".($enregistrement_max-10)."'") or die(mysql_error());
$test_data = mysql_fetch_array($test_req);
print '<br>TEST = '.$test_data[id].'-'.mysql_num_rows($test_req);
 
 
//***********************
$t3=mktime();
//print '<br>timestamp = '.$t3;
print '<br>ecart='.($t3-$t2);
 
print '<br>ecart='.($t3-$t1);
 
}

j'obtiens ceci:


ENGINE => ENGINE = MYISAM
ecart=6
TEST = 9990-1
ecart=58
ecart=64
ENGINE => ENGINE = MEMORY
ecart=5
TEST = 9990-1
ecart=53
ecart=58

je passe de 64s à 58s ... pas énorme, non ?