Importanta cheilor primare in tabele MySql

Astazi mi-am propus sa fac un test pentru a vedea daca exista o imbunatatire de performanta atunci cand se folosesc chei primare in tabelele din bazele de date MySQL.

Pentru aceasta am creat o baza de date:

create database testviteza;

In aceasta baza de date am creat un tabel:

CREATE TABLE `random` (
`id_inregistrare` int(100) NOT NULL DEFAULT ‘0’,
`date` varchar(100) NOT NULL DEFAULT ”
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Mi-am propus sa populez acest tabel cu date. O metoda de a insera multe date in acest tabel intr-un mod rapid a fost sa creez un script PHP care sa faca acest lucru pentru mine
[ad#google-adsense]

<?php
function datealeatoare($length = „”)
{
$code = md5(uniqid(rand(), true));
if ($length != „”) return substr($code, 0, $length);
else return $code;
}
set_time_limit(300);
$link=mysql_connect(‘localhost’, ‘utilizator’, ‘parola’);
mysql_select_db(‘testviteza’, $link);
for($i=0;$i<=1000000;$i++)
{
$sql=”insert into random(id_inregistrare,date) values (‘”.$i.”‘,'”.datealeatoare(100).”‘)”;
mysql_query($sql);
}
echo „Realizat”;
mysql_close($link);
?>

Avand datele introduse in tabel, incercam urmatoare interogare folosind clientul de mysql instalat pe acelasi sistem cu serverul mysql:

mysql_fara_cheie_primara

Mai incercam sa vedem timpul pentru o interogare dupa campul date:

mysql_fara_cheie_primara_interogare2

Vom modifica tabelul creat setand campul id_inregistrare ca fiind cheie primara in tabel.

alter table random add primary key(id_inregistrare);

Dupa aceasta modificare executam din nou prima interogare si observam ca timpul de raspuns este mult mai scazut:

mysql_cu_cheie_primara

Repetand interogarea dupa campul date observam ca aici nu exista o imbunatatire a timpului de raspuns:

mysql_cu_cheie_primara2

Concluzia este simpla: interogarile dupa cheia primara definita pentru tabelul respectiv se executa mult mai rapid.

Articole asemanatoare:

Etichetat cu: , ,

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*