CREATE TABLE TestPerf SELECT Nom, Prenom FROM Apprentis CROSS JOIN Octet CROSS JOIN Chiffres ORDER BY RAND(); -- Tri aléatoire Query OK, 499200 rows affected (26.11 sec)Cherchons maintenant combien il y a d'apprentis prénommés Pierre :
SELECT COUNT(*) FROM TestPerf WHERE Prenom = 'Pierre' ; Réponse de MySQL COUNT(*) I 28160 1 row in set (6.05 sec)
ALTER TABLE TestPerf ADD COLUMN Prenomlndexe VARCHAR(45) ; UPDATE TestPerf SET Prenomlndexe = Prenom ; CREATE INDEX i ON TestPerf(PrenomIndexe) ;
SELECT SQL_NO_CACHE COUNT(*) FROM TestPerf WHERE Prenomlndexe = 'Pierre' ;1 row in set (0.28 sec)
Condition Avec Avec Prenom Prenomindexe = 'Pierre' 7,61 0,41 LIKE 'Pierre%' 7,47 0,03 LIKE '%Pierre%' 7,50 8,33 IS NULL 7,42 0,06 IS NOT NULL 7,66 0,53 IN ('Pierre','Marie') 7,72 0,05Avec la colonne sans index, la durée de la requête est toujours à peu près la même : c'est le temps nécessaire à MySQL pour effectuer un balayage complet de la table (table scan).
Condition Avec Avec Prenom Prenomlndexe < 'Alex' 7,89 0,38 < 'Jean' 7,64 4,00 < 'Yasmina' 7,52 8,39 > 'Alex' 7,56 7,98 > 'Jean' 7,53 4,20 > 'Yasmina' 7,66 0,16
EXPLAIN SELECT COUNT(*) FROM TestPerf2 WHERE Prenom > 'Yasmina'; EXPLAIN SELECT COUNT(*) FROM TestPerf2 WHERE Prenomlndexe > 'Yasmina';
Table Type Possible Key Key Rows Extra _key _len TestPerf ALL 476807 Using where TestPerf range i i 48 9548 Using where Using index
ALTER TABLE Livres ADD INDEX (CodeGenre) ;
ALTER TABLE Livres ADD FOREIGN KEY (CodeGenre) REFERENCES Genres (CodeGenre) ;
ALTER TABLE Livres DROP FOREIGN KEY livres ibfk 1 ;
ALTER TABLE Livres ADD FOREIGN KEY (CodeGenre) REFERENCES Genres (CodeGenre) ON UPDATE CASCADE ON DELETE SET NULL ;
CREATE TABLE Editeurs IDediteur SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Editeur VARCHAR(30) NOT NULL UNIQUE ENGINE = InnoDB ;On peut maintenant créer Collections avec sa contrainte d'intégrité référentielle :
CREATE TABLE Collections IDcoll SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Collection VARCHAR(60) NOT NULL, IDediteur SMALLINT UNSIGNED NOT NULL, INDEX (IDediteur), FOREIGN KEY (IDediteur) REFERENCES Editeurs (IDediteur) ENGINE = InnoDB ;Il ne reste plus qu'à ajouter à la table Livres la contrainte vers Collections :
ALTER TABLE Livres ADD INDEX (IDcoll), ADD FOREIGN KEY (IDcoll) REFERENCES Collections (IDcoll) ;