da alen
13.02.2010, 20:51
Pentru o optimizare a tabelelor din baza de date trebuie folosite tipurile "optime" de date.
De exemplu, daca vrem sa cream un tabel pentru utilizatori, vom avea nevoie de un camp ID cu auto_increment.
Campul respectiv trebuie sa fie numeric.Stim ca tipurile numerice in MySQL sunt:TINYINT, SMALLINT, MEDIUMINT, INT si BIGINT(descrise mai jos).
Tipurile numerice permit atat valori negative cat si valori pozitive.Acestea se stabilesc prin adaugarea proprietatii SIGNED sau UNSIGNED.
Valoarea implicita in MySQL este SIGNED, deci setarea acesteia nu este necesara.Daca este atribuita proprietatea UNSIGNED, campul respectiv va
permite doar valori pozitive.
In concluzie, daca vrem sa cream o coloana pentru id utilizator vom avea doar valori pozitive, deci este necesara proprietatea UNDIGNED.
Puteti intreba "dar de ce sa mai atribui proprietatea respectiva pentru ca oricum vor fi introduse doat valori pozitive?".
Raspunsul este urmatorul:presupunem ca avem un tip TINYINT(acesta permite 256 de numere de la -128 pana la 127);daca nu setam proprietatea UNSIGNED
(sa nu adauge numere negative) vor fi introdusi 127 de utilizatori;utilizatorul cu numarul 128 nu va mai fi introdus.
Atribuind proprietatea UNSIGNED vom obtine 256(inclusiv 0) de valori(adica dublu).
Tipurile numerice permit urmatoarele valori:
-TINYINT de la -128 pana la 256; cu UNSIGNED 256;
-SMALLINT de la -32.768 pana la 32.767; cu UNSIGNED 65.535;
-MEDIUMINT de la 8.388.608 pana la 8.388.607; cu UNSIGNED 16.777.215;
-INT de la -2.147.483.648 pana la 2.147.483.647; cu UNSIGNED 4.294.967.295;
-BIGINT de la -9.223.372.036.854.775.808 pana la 9.223.372.036.854.775.807; cu UNSIGNED :) .
De zici tragem concluzia ca pentru un tabel in care introducem utilizatori, coloana id_utilizator ar trebui sa fie SMALLINT UNSIGNED.
(65.535 de utilizatori).
De ce este bine sa setam tipul optim.Pentru un anumit tip MySQL aloca spatiu pe disc pantru valoarea maxima, deci pierdem spatiu si accesul la date
se face mai greu.
Deci vom crea un tabel utilizatori prin comanda:
CREATE TABLE `utilizatori` (
`id` tinyint unsigned NOT NULL AUTO_INCREMENT,
`nume` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=1 ;
Valoarea AUTO_INCREMENT=1 este folsita pentru a incepe incrementarea(numerotarea utilizatorilor) de la 1
Daca reexecutam comanda de mai sus in felul urmator:
CREATE TABLE `utilizatori` (
`id` tinyint unsigned NOT NULL AUTO_INCREMENT,
`nume` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=10 ;
si apoi introducem o valoarea in acest tabel, fara sa specificam id-ul vom observa ca numerotarea va incepe de la 10, urmatorul utilizator primind
valoarea 11.
INSERT INTO `utilizatori` (`id`, `nume`) VALUES
( '','utilizatori');
Incercati sa intoruduceti in tabel o intrare cu id 256(tipul fiind TINYINT).Va fi introdusa valoarea 255 doar in cazul in care aceasta nu exista.
Daca incercati sa introduceti din nou aceasta valoare(255 sau una mai mare de 255) veti primi eroarea "Duplicate entry '255' for key 'PRIMARY'"
deoarece valoarea maxima permisa este deja setata.
INSERT INTO `utilizatori` (`id`, `nume`) VALUES
( '256','utilizatori');
Vom continua cu celelalte tipuri.
De exemplu, daca vrem sa cream un tabel pentru utilizatori, vom avea nevoie de un camp ID cu auto_increment.
Campul respectiv trebuie sa fie numeric.Stim ca tipurile numerice in MySQL sunt:TINYINT, SMALLINT, MEDIUMINT, INT si BIGINT(descrise mai jos).
Tipurile numerice permit atat valori negative cat si valori pozitive.Acestea se stabilesc prin adaugarea proprietatii SIGNED sau UNSIGNED.
Valoarea implicita in MySQL este SIGNED, deci setarea acesteia nu este necesara.Daca este atribuita proprietatea UNSIGNED, campul respectiv va
permite doar valori pozitive.
In concluzie, daca vrem sa cream o coloana pentru id utilizator vom avea doar valori pozitive, deci este necesara proprietatea UNDIGNED.
Puteti intreba "dar de ce sa mai atribui proprietatea respectiva pentru ca oricum vor fi introduse doat valori pozitive?".
Raspunsul este urmatorul:presupunem ca avem un tip TINYINT(acesta permite 256 de numere de la -128 pana la 127);daca nu setam proprietatea UNSIGNED
(sa nu adauge numere negative) vor fi introdusi 127 de utilizatori;utilizatorul cu numarul 128 nu va mai fi introdus.
Atribuind proprietatea UNSIGNED vom obtine 256(inclusiv 0) de valori(adica dublu).
Tipurile numerice permit urmatoarele valori:
-TINYINT de la -128 pana la 256; cu UNSIGNED 256;
-SMALLINT de la -32.768 pana la 32.767; cu UNSIGNED 65.535;
-MEDIUMINT de la 8.388.608 pana la 8.388.607; cu UNSIGNED 16.777.215;
-INT de la -2.147.483.648 pana la 2.147.483.647; cu UNSIGNED 4.294.967.295;
-BIGINT de la -9.223.372.036.854.775.808 pana la 9.223.372.036.854.775.807; cu UNSIGNED :) .
De zici tragem concluzia ca pentru un tabel in care introducem utilizatori, coloana id_utilizator ar trebui sa fie SMALLINT UNSIGNED.
(65.535 de utilizatori).
De ce este bine sa setam tipul optim.Pentru un anumit tip MySQL aloca spatiu pe disc pantru valoarea maxima, deci pierdem spatiu si accesul la date
se face mai greu.
Deci vom crea un tabel utilizatori prin comanda:
CREATE TABLE `utilizatori` (
`id` tinyint unsigned NOT NULL AUTO_INCREMENT,
`nume` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=1 ;
Valoarea AUTO_INCREMENT=1 este folsita pentru a incepe incrementarea(numerotarea utilizatorilor) de la 1
Daca reexecutam comanda de mai sus in felul urmator:
CREATE TABLE `utilizatori` (
`id` tinyint unsigned NOT NULL AUTO_INCREMENT,
`nume` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=10 ;
si apoi introducem o valoarea in acest tabel, fara sa specificam id-ul vom observa ca numerotarea va incepe de la 10, urmatorul utilizator primind
valoarea 11.
INSERT INTO `utilizatori` (`id`, `nume`) VALUES
( '','utilizatori');
Incercati sa intoruduceti in tabel o intrare cu id 256(tipul fiind TINYINT).Va fi introdusa valoarea 255 doar in cazul in care aceasta nu exista.
Daca incercati sa introduceti din nou aceasta valoare(255 sau una mai mare de 255) veti primi eroarea "Duplicate entry '255' for key 'PRIMARY'"
deoarece valoarea maxima permisa este deja setata.
INSERT INTO `utilizatori` (`id`, `nume`) VALUES
( '256','utilizatori');
Vom continua cu celelalte tipuri.