Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
elearning:workbooks:mysql:my05a [2022/11/09 12:08] adminelearning:workbooks:mysql:my05a [2022/11/09 12:44] (Version actuelle) admin
Ligne 11: Ligne 11:
 ====Mémoire==== ====Mémoire====
  
-La mémoire est un facteur critique pour le serveur MySQL. La donnée la plus importante est la quantité de données consultées. Prenons le cas d'une base de données de 20Go où seules les données de la dernière semaine sont consultées. Si ces données ne représentent que 1Go, un serveur muni de 2Go suffira largement.+La mémoire est un facteur critique pour le serveur MariaDB. La donnée la plus importante est la quantité de données consultées. Prenons le cas d'une base de données de 20Go où seules les données de la dernière semaine sont consultées. Si ces données ne représentent que 1Go, un serveur muni de 2Go suffira largement.
  
 ====Disque Dur==== ====Disque Dur====
Ligne 19: Ligne 19:
 =====Système d'Exploitation===== =====Système d'Exploitation=====
  
-MySQL est disponible pour Windows(tm), Solaris(tm) et Linux. Le choix du Système d'Exploitation est une question de coût, de compétences internes et de politique de l'infrastructure informatique. +MariaDB est disponible pour Windows(tm), Solaris(tm) et Linux. Le choix du Système d'Exploitation est une question de coût, de compétences internes et de politique de l'infrastructure informatique. 
  
 =====Cache de Requêtes===== =====Cache de Requêtes=====
  
-Le cache des requêtes est utilisé par MySQL lors des requêtes de type SELECT. Le cache est utile dans le cas où la majorité des requêtes sont de type lecture. Lors d'un SELECT, MySQL vérifie si la requête est déjà dans le cache. Cette vérification est faite pour **toutes** les requêtes, mêmes celles qui sont **impropres**. Il ne faut donc **pas** activer le cache quand :+Le cache des requêtes est utilisé par MariaDB lors des requêtes de type SELECT. Le cache est utile dans le cas où la majorité des requêtes sont de type lecture. Lors d'un SELECT, MariaDB vérifie si la requête est déjà dans le cache. Cette vérification est faite pour **toutes** les requêtes, mêmes celles qui sont **impropres**. Il ne faut donc **pas** activer le cache quand :
  
   * les écritures sont nombreuses,   * les écritures sont nombreuses,
Ligne 32: Ligne 32:
  
 <code> <code>
-mysql> SHOW VARIABLES LIKE 'query_cache_type';+MariaDB [(none)]> SHOW VARIABLES LIKE 'query_cache_type';
 +------------------+-------+ +------------------+-------+
 | Variable_name    | Value | | Variable_name    | Value |
Ligne 40: Ligne 40:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 55: Ligne 55:
 ====Requêtes==== ====Requêtes====
  
-MySQL recherche dans le cache chaque fois qu'il y a une requête SELECT. MySQL est sensible à la case. Pour cette raison, MySQL considère que les trois requêtes suivantes sont différentes :+MariaDB recherche dans le cache chaque fois qu'il y a une requête SELECT. MariaDB est sensible à la case. Pour cette raison, MariaDB considère que les trois requêtes suivantes sont différentes :
  
   * SELECT prenom,nom FROM familles,   * SELECT prenom,nom FROM familles,
Ligne 63: Ligne 63:
 ====Invalidations==== ====Invalidations====
  
-Le serveur MySQL met à jour automatiquement le contenu du cache. Lors d'une modification d'une table au niveau de sa structure ou bien au niveau de ses données, le serveur MySQL cherche l'efficacité et supprime du cache **toutes** les requêtes impliquant la table concernée.+Le serveur MariaDB met à jour automatiquement le contenu du cache. Lors d'une modification d'une table au niveau de sa structure ou bien au niveau de ses données, le serveur MariaDB cherche l'efficacité et supprime du cache **toutes** les requêtes impliquant la table concernée.
  
 ====Effacements==== ====Effacements====
  
-Dans le cas où le cache n'est pas suffisant pour stocker une requête, MySQL procède a un effacement de l'entrée la plus ancienne. Ce processus s’appelle un **effacement**.+Dans le cas où le cache n'est pas suffisant pour stocker une requête, MariaDB procède a un effacement de l'entrée la plus ancienne. Ce processus s’appelle un **effacement**.
  
 ====Fragmentation==== ====Fragmentation====
  
-MySQL divise le cache en blocs mémoire d'une taille égale. Quand une requête est mise en cache, le serveur MySQL ne connaît pas à l'avance le nombre d'enregistrements qui vont être retournées. De ce fait, il ne connaît pas non plus l'occupation de la mémoire. Si la requête n'occupe pas un nombre entier de blocs, la mémoire concernée est perdue. Dans ce cas on parle de **fragmentation**.+MariaDB divise le cache en blocs mémoire d'une taille égale. Quand une requête est mise en cache, le serveur MariaDB ne connaît pas à l'avance le nombre d'enregistrements qui vont être retournées. De ce fait, il ne connaît pas non plus l'occupation de la mémoire. Si la requête n'occupe pas un nombre entier de blocs, la mémoire concernée est perdue. Dans ce cas on parle de **fragmentation**.
  
 ====Paramètres==== ====Paramètres====
Ligne 89: Ligne 89:
  
 <code> <code>
-mysql> SHOW GLOBAL STATUS LIKE 'Qcache%';+MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Qcache%';
 +-------------------------+-------+ +-------------------------+-------+
 | Variable_name           | Value | | Variable_name           | Value |
Ligne 115: Ligne 115:
  
 <code> <code>
-mysql> SHOW GLOBAL STATUS LIKE 'Com_select';+MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Com_select';
 +---------------+-------+ +---------------+-------+
 | Variable_name | Value | | Variable_name | Value |
Ligne 142: Ligne 142:
 </file> </file>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Pour défragmenter le cache, il convient d'utiliser la commande **FLUSH QUERY CACHE**. Il est à noter que cette commande ne vide pas le contenu du cache. Pour vider le contenu du cache, il convient d'utiliser la commande **RESET QUERY CACHE**. Pour défragmenter le cache, il convient d'utiliser la commande **FLUSH QUERY CACHE**. Il est à noter que cette commande ne vide pas le contenu du cache. Pour vider le contenu du cache, il convient d'utiliser la commande **RESET QUERY CACHE**.
-</note>+</WRAP>
  
  
 =====Optimisation du Schéma===== =====Optimisation du Schéma=====
  
-L'optimisation du schéma est un aspect primordial de la bonne gestion de MySQL. Les règles de base sont les suivantes :+L'optimisation du schéma est un aspect primordial de la bonne gestion de MariaDB. Les règles de base sont les suivantes :
  
   * Plus le type de données est petit et compact, plus il sera léger et performant,   * Plus le type de données est petit et compact, plus il sera léger et performant,
   * Évitez des colonnes NULL car cela demande plus de travail au serveur que des colonnes NOT NULL,   * Évitez des colonnes NULL car cela demande plus de travail au serveur que des colonnes NOT NULL,
   * Utilisez des champs adéquats aux besoins réels de la donnée à stocker,   * Utilisez des champs adéquats aux besoins réels de la donnée à stocker,
-  * Ne surdimensionnez pas les champs de texte car MySQL utilise la taille maximale pour effectuer des tris. Privilégiez donc des champs VARCHAR par rapport CHAR car ce dernier a une longueur fixe.+  * Ne surdimensionnez pas les champs de texte car MariaDB utilise la taille maximale pour effectuer des tris. Privilégiez donc des champs VARCHAR par rapport CHAR car ce dernier a une longueur fixe.
  
 ====PROCEDURE ANALYSE==== ====PROCEDURE ANALYSE====
  
-Afin de vous aider, MySQL fournit une commande capable d'examiner les données réellement présentes dans une table et de vous conseiller sur le type de champ à adopter :+Afin de vous aider, MariaDB fournit une commande capable d'examiner les données réellement présentes dans une table et de vous conseiller sur le type de champ à adopter :
  
 <code> <code>
-mysql> SHOW DATABASES;+MariaDB [(none)]> SHOW DATABASES;
 +--------------------+ +--------------------+
 | Database           | | Database           |
Ligne 174: Ligne 175:
 6 rows in set (0.01 sec) 6 rows in set (0.01 sec)
  
-mysql> USE ligue1;+MariaDB [(none)]> USE ligue1;
 Database changed Database changed
-mysql> SHOW TABLES;+MariaDB [(none)]> SHOW TABLES;
 +------------------+ +------------------+
 | Tables_in_ligue1 | | Tables_in_ligue1 |
Ligne 185: Ligne 186:
 2 rows in set (0.00 sec) 2 rows in set (0.00 sec)
  
-mysql> SHOW CREATE TABLE equipe\G+MariaDB [(none)]> SHOW CREATE TABLE equipe\G
 *************************** 1. row *************************** *************************** 1. row ***************************
        Table: equipe        Table: equipe
Ligne 199: Ligne 200:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql> SELECT * FROM equipe PROCEDURE ANALYSE()\G+MariaDB [(none)]> SELECT * FROM equipe PROCEDURE ANALYSE()\G
 *************************** 1. row *************************** *************************** 1. row ***************************
              Field_name: ligue1.equipe.id_equipe              Field_name: ligue1.equipe.id_equipe
Ligne 268: Ligne 269:
 6 rows in set (0.00 sec) 6 rows in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 286: Ligne 287:
  
 <code> <code>
-mysql> CREATE DATABASE connaissances;+MariaDB [(none)]> CREATE DATABASE connaissances;
 Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec)
-mysql> USE connaissances;+MariaDB [(none)]> USE connaissances;
 Database changed Database changed
 </code> </code>
Ligne 308: Ligne 309:
  
 <code> <code>
-mysql> CREATE TABLE employe (+MariaDB [(none)]> CREATE TABLE employe (
     -> id int(11) NOT NULL,     -> id int(11) NOT NULL,
     -> nom varchar(30) NOT NULL DEFAULT '',     -> nom varchar(30) NOT NULL DEFAULT '',
Ligne 320: Ligne 321:
 Query OK, 0 rows affected (0.06 sec) Query OK, 0 rows affected (0.06 sec)
  
-mysql>+MariaDB [(none)]>
 </code> </code>
  
Ligne 326: Ligne 327:
  
 <file> <file>
-INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('1' , 'Alex', 'Londres', 'Linux', '10','Solaris', '8');INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('2' , 'Mathieu', 'Paris', 'Apache', '5','MySQL', '7');INSERT INTO employe (id, nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('3' , 'Thomas', 'Paris', 'Linux', '5','MySQL', '7');+INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('1' , 'Alex', 'Londres', 'Linux', '10','Solaris', '8');INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('2' , 'Mathieu', 'Paris', 'Apache', '5','MariaDB', '7');INSERT INTO employe (id, nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('3' , 'Thomas', 'Paris', 'Linux', '5','MariaDB', '7');
 </file> </file>
  
 <code> <code>
-mysql> INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('1' , 'Alex', 'Londres', 'Linux', '10','Solaris', '8');INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('2' , 'Mathieu', 'Paris', 'Apache', '5','MySQL', '7');INSERT INTO employe (id, nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('3' , 'Thomas', 'Paris', 'Linux', '5','MySQL', '7');+MariaDB [(none)]> INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('1' , 'Alex', 'Londres', 'Linux', '10','Solaris', '8');INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('2' , 'Mathieu', 'Paris', 'Apache', '5','MariaDB', '7');INSERT INTO employe (id, nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES ('3' , 'Thomas', 'Paris', 'Linux', '5','MariaDB', '7');
 Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec)
  
Ligne 341: Ligne 342:
  
 <code> <code>
-mysql> SELECT * FROM employe;+MariaDB [(none)]> SELECT * FROM employe;
 +----+---------+---------+---------+------+---------+------+ +----+---------+---------+---------+------+---------+------+
 | id | nom     | ville   | savoir1 | niv1 | savoir2 | niv2 | | id | nom     | ville   | savoir1 | niv1 | savoir2 | niv2 |
 +----+---------+---------+---------+------+---------+------+ +----+---------+---------+---------+------+---------+------+
 |  1 | Alex    | Londres | Linux     10 | Solaris |    8 | |  1 | Alex    | Londres | Linux     10 | Solaris |    8 |
-|  2 | Mathieu | Paris   | Apache  |    5 | MySQL   |    7 | +|  2 | Mathieu | Paris   | Apache  |    5 | MariaDB   |    7 | 
-|  3 | Thomas  | Paris   | Linux      5 | MySQL   |    7 |+|  3 | Thomas  | Paris   | Linux      5 | MariaDB   |    7 |
 +----+---------+---------+---------+------+---------+------+ +----+---------+---------+---------+------+---------+------+
 3 rows in set (0.01 sec) 3 rows in set (0.01 sec)
  
-mysql>+MariaDB [(none)]>
 </code> </code>
- 
-<note> 
-Normalisez la table connaissances.employe. 
-</note> 
  
 =====Indexes===== =====Indexes=====
Ligne 371: Ligne 368:
  
   * Avec CREATE INDEX le nom de l'index est obligatoire,   * Avec CREATE INDEX le nom de l'index est obligatoire,
-  * Avec ALTER TABLE si le nom de l'index n'est pas spécifié, MySQL en crée un,+  * Avec ALTER TABLE si le nom de l'index n'est pas spécifié, MariaDB en crée un,
   * Avec ALTER TABLE il est possible de créer plusieurs index en même temps en séparant les clauses ADD INDEX par des virgules.   * Avec ALTER TABLE il est possible de créer plusieurs index en même temps en séparant les clauses ADD INDEX par des virgules.
  
Ligne 387: Ligne 384:
  
 <code> <code>
-mysql> use indexes;+MariaDB [(none)]> use indexes;
 Reading table information for completion of table and column names Reading table information for completion of table and column names
 You can turn off this feature to get a quicker startup with -A You can turn off this feature to get a quicker startup with -A
Ligne 393: Ligne 390:
 Database changed Database changed
  
-mysql> INSERT INTO t (id) VALUES (1);+MariaDB [(none)]> INSERT INTO t (id) VALUES (1);
 Query OK, 1 row affected (0.01 sec) Query OK, 1 row affected (0.01 sec)
  
-mysql> INSERT INTO t (id) VALUES (1);+MariaDB [(none)]> INSERT INTO t (id) VALUES (1);
 ERROR 1062 (23000): Duplicate entry '1' for key 'id' ERROR 1062 (23000): Duplicate entry '1' for key 'id'
  
-mysql> INSERT INTO t (id) VALUES (NULL);+MariaDB [(none)]> INSERT INTO t (id) VALUES (NULL);
 Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec)
  
-mysql> INSERT INTO t (id) VALUES (NULL);+MariaDB [(none)]> INSERT INTO t (id) VALUES (NULL);
 Query OK, 1 row affected (0.02 sec) Query OK, 1 row affected (0.02 sec)
  
-mysql> SELECT * FROM t;+MariaDB [(none)]> SELECT * FROM t;
 +------+ +------+
 | id   | | id   |
Ligne 415: Ligne 412:
 3 rows in set (0.00 sec) 3 rows in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 426: Ligne 423:
  
 <code> <code>
-mysql> CREATE TABLE t1 (id INT);+MariaDB [(none)]> CREATE TABLE t1 (id INT);
 Query OK, 0 rows affected (0.03 sec) Query OK, 0 rows affected (0.03 sec)
  
-mysql> CREATE INDEX `PRIMARY` ON t1; +MariaDB [(none)]> CREATE INDEX `PRIMARY` ON t1; 
-ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1+ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
  
-mysql> ALTER TABLE t1 ADD PRIMARY KEY (ID);+MariaDB [(none)]> ALTER TABLE t1 ADD PRIMARY KEY (ID);
 Query OK, 0 rows affected (0.06 sec) Query OK, 0 rows affected (0.06 sec)
 Records: 0  Duplicates: 0  Warnings: 0 Records: 0  Duplicates: 0  Warnings: 0
Ligne 440: Ligne 437:
  
 <code> <code>
-mysql> CREATE TABLE t2 (id INT, col1 VARCHAR(30), col2 VARCHAR(30));+MariaDB [(none)]> CREATE TABLE t2 (id INT, col1 VARCHAR(30), col2 VARCHAR(30));
 Query OK, 0 rows affected (0.33 sec) Query OK, 0 rows affected (0.33 sec)
  
-mysql> CREATE INDEX index_col12 ON t2 (col1,col2);+MariaDB [(none)]> CREATE INDEX index_col12 ON t2 (col1,col2);
 Query OK, 0 rows affected (0.11 sec) Query OK, 0 rows affected (0.11 sec)
 Records: 0  Duplicates: 0  Warnings: 0 Records: 0  Duplicates: 0  Warnings: 0
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important> +<WRAP center round important 60%
-MySQL est capable d'exploiter un préfixe à gauche de l'index multicolonne. Cela implique que si MySQL juge que seul **col1** est nécessaire pour faire le travail, il est capable de l'isoler de l'index multicolonne. +**Important** : 
-</note+MariaDB est capable d'exploiter un préfixe à gauche de l'index multicolonne. Cela implique que si MariaDB juge que seul **col1** est nécessaire pour faire le travail, il est capable de l'isoler de l'index multicolonne. 
 +</WRAP
  
 ===Index sur un Préfixe de Colonne=== ===Index sur un Préfixe de Colonne===
  
 <code> <code>
-mysql> CREATE TABLE t3 (col TEXT);+MariaDB [(none)]> CREATE TABLE t3 (col TEXT);
 Query OK, 0 rows affected (0.94 sec) Query OK, 0 rows affected (0.94 sec)
  
-mysql> CREATE INDEX index_prefixe ON t3 (col);+MariaDB [(none)]> CREATE INDEX index_prefixe ON t3 (col);
 ERROR 1170 (42000): BLOB/TEXT column 'col' used in key specification without a key length ERROR 1170 (42000): BLOB/TEXT column 'col' used in key specification without a key length
  
-mysql> CREATE INDEX index_prefixe ON t3 (col(50));+MariaDB [(none)]> CREATE INDEX index_prefixe ON t3 (col(50));
 Query OK, 0 rows affected (0.10 sec) Query OK, 0 rows affected (0.10 sec)
 Records: 0  Duplicates: 0  Warnings: 0 Records: 0  Duplicates: 0  Warnings: 0
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Pour les index stockant du texte, il est possible de ne créer l'index que sur les N premiers caractères du champ. Pour les index stockant du texte, il est possible de ne créer l'index que sur les N premiers caractères du champ.
-</note>+</WRAP>
  
 ===Clefs Etrangères=== ===Clefs Etrangères===
  
-Une clef étrangère indique à MySQL de rejeter tout ajout ou modification dans la table enfant si la valeur de la clef n'a pas de correspondance dans la table parent.+Une clef étrangère indique à MariaDB de rejeter tout ajout ou modification dans la table enfant si la valeur de la clef n'a pas de correspondance dans la table parent.
  
 <code> <code>
-mysql> CREATE TABLE t4 (+MariaDB [(none)]> CREATE TABLE t4 (
     -> id INT(11) NOT NULL AUTO_INCREMENT,     -> id INT(11) NOT NULL AUTO_INCREMENT,
     -> nom VARCHAR(20) NOT NULL DEFAULT'',     -> nom VARCHAR(20) NOT NULL DEFAULT'',
Ligne 487: Ligne 486:
 Query OK, 0 rows affected (0.32 sec) Query OK, 0 rows affected (0.32 sec)
  
-mysql> CREATE TABLE t5 ( id INT(11) NOT NULL AUTO_INCREMENT, ref_nom VARCHAR(20) NOT NULL DEFAULT'', PRIMARY KEY (id), CONSTRAINT foreign_index FOREIGN KEY foreign_ref_nom (ref_nom) REFERENCES t4(nom)) ENGINE = InnoDB;+MariaDB [(none)]> CREATE TABLE t5 ( id INT(11) NOT NULL AUTO_INCREMENT, ref_nom VARCHAR(20) NOT NULL DEFAULT'', PRIMARY KEY (id), CONSTRAINT foreign_index FOREIGN KEY foreign_ref_nom (ref_nom) REFERENCES t4(nom)) ENGINE = InnoDB;
 Query OK, 0 rows affected (0.31 sec) Query OK, 0 rows affected (0.31 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 La clause CONSTRAINT est optionnelle. Le nom de la contrainte doit être unique dans toute la base. Le nom de l'index est optionnel. La clef étrangère peut référencer plusieurs champs en même temps mais tous les champs doivent être dans la même table. La clause CONSTRAINT est optionnelle. Le nom de la contrainte doit être unique dans toute la base. Le nom de l'index est optionnel. La clef étrangère peut référencer plusieurs champs en même temps mais tous les champs doivent être dans la même table.
-</note>+</WRAP>
  
 Lors d'une suppression ou d'une mise à jour, le comportement est dicté par l'ajout d'une clause supplémentaire dans la clause FOREIGN KEY : Lors d'une suppression ou d'une mise à jour, le comportement est dicté par l'ajout d'une clause supplémentaire dans la clause FOREIGN KEY :
Ligne 505: Ligne 505:
 ===Index Cluster avec InnoDB=== ===Index Cluster avec InnoDB===
  
-Le moteur InnoDB stocke les données **avec** la clef primaire. Par conséquent toute requête qui utilise la clef primaire est très efficace. Par contre toute requête qui utilise une clef secondaire est moins efficace car MySQL recherche d'abord dans l'index secondaire la clef primaire associée puis recherche les données à partir de la clef primaire.+Le moteur InnoDB stocke les données **avec** la clef primaire. Par conséquent toute requête qui utilise la clef primaire est très efficace. Par contre toute requête qui utilise une clef secondaire est moins efficace car MariaDB recherche d'abord dans l'index secondaire la clef primaire associée puis recherche les données à partir de la clef primaire.
  
-<note important> +<WRAP center round important 60%> 
-Dans le cas où une clef primaire n'existe pas, MySQL essaie de trouver une clef unique ne contentant aucune valeur NULL. S'il n'en trouve pas, il crée une clef primaire cachée. +**Important** : 
-</note>+Dans le cas où une clef primaire n'existe pas, MariaDB essaie de trouver une clef unique ne contentant aucune valeur NULL. S'il n'en trouve pas, il crée une clef primaire cachée. 
 +</WRAP>
  
 ===Index Couvrant=== ===Index Couvrant===
  
-Dans le cas où toutes les données nécessaires à la résolution d'une requête se trouvent dans un index, on parle d'un index **couvrant**. Dans ce cas, l'optimiseur de MySQL n'a pas besoin de chercher les données.+Dans le cas où toutes les données nécessaires à la résolution d'une requête se trouvent dans un index, on parle d'un index **couvrant**. Dans ce cas, l'optimiseur de MariaDB n'a pas besoin de chercher les données.
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Un index peut être créé avec un de deux algorithmes principaux : B-Tree ou Hash. Un index couvrant est forcément de type B-Tree. Un index peut être créé avec un de deux algorithmes principaux : B-Tree ou Hash. Un index couvrant est forcément de type B-Tree.
-</note>+</WRAP>
  
 ===Index FULLTEXT=== ===Index FULLTEXT===
Ligne 524: Ligne 526:
  
 <code> <code>
-mysql> CREATE TABLE t6(+MariaDB [(none)]> CREATE TABLE t6(
     -> col1 VARCHAR(50),     -> col1 VARCHAR(50),
     -> col2 VARCHAR(50),     -> col2 VARCHAR(50),
Ligne 533: Ligne 535:
 </code> </code>
  
-<note important> +<WRAP center round important 60%> 
-Le moteur InnoDB supporte les index FULLTEXT à partir de la version 5.6 de MySQL+**Important** : 
-</note>+Le moteur InnoDB supporte les index FULLTEXT à partir de la version 5.6 de MariaDB
 +</WRAP>
  
 <code> <code>
-mysql> CREATE TABLE t6( col1 VARCHAR(50), col2 VARCHAR(50), col3 VARCHAR(50), FULLTEXT index_col1_col2 (col1,col2) ) ENGINE=MyISAM;+MariaDB [(none)]> CREATE TABLE t6( col1 VARCHAR(50), col2 VARCHAR(50), col3 VARCHAR(50), FULLTEXT index_col1_col2 (col1,col2) ) ENGINE=MyISAM;
 Query OK, 0 rows affected (0.04 sec) Query OK, 0 rows affected (0.04 sec)
  
-mysql> CREATE FULLTEXT INDEX index_col2 ON t6 (col2);+MariaDB [(none)]> CREATE FULLTEXT INDEX index_col2 ON t6 (col2);
 Query OK, 0 rows affected (0.07 sec) Query OK, 0 rows affected (0.07 sec)
 Records: 0  Duplicates: 0  Warnings: 0 Records: 0  Duplicates: 0  Warnings: 0
  
-mysql> ALTER TABLE t6 ADD FULLTEXT index_col3 (col3);+MariaDB [(none)]> ALTER TABLE t6 ADD FULLTEXT index_col3 (col3);
 Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec)
 Records: 0  Duplicates: 0  Warnings: 0 Records: 0  Duplicates: 0  Warnings: 0
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 593: Ligne 596:
  
 <code> <code>
-mysql> USE sakila;+MariaDB [(none)]> USE sakila;
 Reading table information for completion of table and column names Reading table information for completion of table and column names
 You can turn off this feature to get a quicker startup with -A You can turn off this feature to get a quicker startup with -A
  
 Database changed Database changed
-mysql> SELECT film_id,+MariaDB [(none)]> SELECT film_id,
     -> LEFT(description,30),     -> LEFT(description,30),
     -> MATCH(title,description)     -> MATCH(title,description)
Ligne 617: Ligne 620:
 5 rows in set (0.00 sec) 5 rows in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Par défaut une requête FULLTEXT est une recherches en langage naturel. Ceci implique que chaque mot de la clause AGAINST est recherché dans l'index et que la pertinence est calculé en fonction de la fréquences d'apparition. Notez que si un mot est peu fréquent dans l'ensemble des lignes indexées et ce mot fait partie de ceux recherchés, la pertinence de la ligne trouvée sera plus haute que la pertinence de la ligne contenant un mot peu qui est fréquent dans les lignes. Dernièrement et par défaut les mots faisant partie de au moins 50% des enregistrements sont automatiquement ignorés. Il n'est pas possible de modifier ce pourcentage. Par défaut une requête FULLTEXT est une recherches en langage naturel. Ceci implique que chaque mot de la clause AGAINST est recherché dans l'index et que la pertinence est calculé en fonction de la fréquences d'apparition. Notez que si un mot est peu fréquent dans l'ensemble des lignes indexées et ce mot fait partie de ceux recherchés, la pertinence de la ligne trouvée sera plus haute que la pertinence de la ligne contenant un mot peu qui est fréquent dans les lignes. Dernièrement et par défaut les mots faisant partie de au moins 50% des enregistrements sont automatiquement ignorés. Il n'est pas possible de modifier ce pourcentage.
-</note>+</WRAP>
  
 ==Mode Booléen== ==Mode Booléen==
Ligne 638: Ligne 642:
  
 <code> <code>
-mysql> SELECT film_id,title,description FROM film_text WHERE MATCH(title,description) AGAINST('Data* Administrator +Anaconda' IN BOOLEAN MODE)\G*************************** 1. row ***************************+MariaDB [(none)]> SELECT film_id,title,description FROM film_text WHERE MATCH(title,description) AGAINST('Data* Administrator +Anaconda' IN BOOLEAN MODE)\G*************************** 1. row ***************************
     film_id: 23     film_id: 23
       title: ANACONDA CONFESSIONS       title: ANACONDA CONFESSIONS
Ligne 648: Ligne 652:
 2 rows in set (0.01 sec) 2 rows in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Notez que seulement deux résultats sont retournés. En effet, il n'y a que deux enregistrements dans la base qui contiennent le mot Anaconda. Notez que les mots faisant partie de au moins 50% des enregistrements **ne** sont **pas** automatiquement ignorés. Notez que seulement deux résultats sont retournés. En effet, il n'y a que deux enregistrements dans la base qui contiennent le mot Anaconda. Notez que les mots faisant partie de au moins 50% des enregistrements **ne** sont **pas** automatiquement ignorés.
-</note>+</WRAP>
  
 ==Mode Expansion de Requête== ==Mode Expansion de Requête==
Ligne 660: Ligne 665:
  
 <code> <code>
-mysql> SELECT film_id,title,description FROM film_text WHERE MATCH(title,description) AGAINST('MySQL');+MariaDB [(none)]> SELECT film_id,title,description FROM film_text WHERE MATCH(title,description) AGAINST('MariaDB');
 +---------+------------------------+----------------------------------------------------------------------------------------------------------------------+ +---------+------------------------+----------------------------------------------------------------------------------------------------------------------+
 | film_id | title                  | description                                                                                                          | | film_id | title                  | description                                                                                                          |
 +---------+------------------------+----------------------------------------------------------------------------------------------------------------------+ +---------+------------------------+----------------------------------------------------------------------------------------------------------------------+
-|     428 | HOMICIDE PEACH         | A Astounding Documentary of a Hunter And a Boy who must Confront a Boy in A MySQL Convention                         | +|     428 | HOMICIDE PEACH         | A Astounding Documentary of a Hunter And a Boy who must Confront a Boy in A MariaDB Convention                         | 
-|     577 | MILE MULAN             | A Lacklusture Epistle of a Cat And a Husband who must Confront a Boy in A MySQL Convention                           | +|     577 | MILE MULAN             | A Lacklusture Epistle of a Cat And a Husband who must Confront a Boy in A MariaDB Convention                           | 
-|     812 | SMOKING BARBARELLA     | A Lacklusture Saga of a Mad Cow And a Mad Scientist who must Sink a Cat in A MySQL Convention                        | +|     812 | SMOKING BARBARELLA     | A Lacklusture Saga of a Mad Cow And a Mad Scientist who must Sink a Cat in A MariaDB Convention                        | 
-|     936 | VANISHING ROCKY        | A Brilliant Reflection of a Man And a Woman who must Conquer a Pioneer in A MySQL Convention                         | +|     936 | VANISHING ROCKY        | A Brilliant Reflection of a Man And a Woman who must Conquer a Pioneer in A MariaDB Convention                         | 
-|     494 | KARATE MOON            | A Astounding Yarn of a Womanizer And a Dog who must Reach a Waitress in A MySQL Convention                           | +|     494 | KARATE MOON            | A Astounding Yarn of a Womanizer And a Dog who must Reach a Waitress in A MariaDB Convention                           | 
-|     608 | MURDER ANTITRUST       | A Brilliant Yarn of a Car And a Database Administrator who must Escape a Boy in A MySQL Convention                   | +|     608 | MURDER ANTITRUST       | A Brilliant Yarn of a Car And a Database Administrator who must Escape a Boy in A MariaDB Convention                   | 
-|     341 | FROST HEAD             | A Amazing Reflection of a Lumberjack And a Cat who must Discover a Husband in A MySQL Convention                     | +|     341 | FROST HEAD             | A Amazing Reflection of a Lumberjack And a Cat who must Discover a Husband in A MariaDB Convention                     | 
-|     773 | SEABISCUIT PUNK        | A Insightful Saga of a Man And a Forensic Psychologist who must Discover a Mad Cow in A MySQL Convention             | +|     773 | SEABISCUIT PUNK        | A Insightful Saga of a Man And a Forensic Psychologist who must Discover a Mad Cow in A MariaDB Convention             | 
-|     242 | DOOM DANCING           | A Astounding Panorama of a Car And a Mad Scientist who must Battle a Lumberjack in A MySQL Convention                | +|     242 | DOOM DANCING           | A Astounding Panorama of a Car And a Mad Scientist who must Battle a Lumberjack in A MariaDB Convention                | 
-|     819 | SONG HEDWIG            | A Amazing Documentary of a Man And a Husband who must Confront a Squirrel in A MySQL Convention                      | +|     819 | SONG HEDWIG            | A Amazing Documentary of a Man And a Husband who must Confront a Squirrel in A MariaDB Convention                      | 
-|      15 | ALIEN CENTER           | A Brilliant Drama of a Cat And a Mad Scientist who must Battle a Feminist in A MySQL Convention                      | +|      15 | ALIEN CENTER           | A Brilliant Drama of a Cat And a Mad Scientist who must Battle a Feminist in A MariaDB Convention                      | 
-|     137 | CHARADE DUFFEL         | A Action-Packed Display of a Man And a Waitress who must Build a Dog in A MySQL Convention                           | +|     137 | CHARADE DUFFEL         | A Action-Packed Display of a Man And a Waitress who must Build a Dog in A MariaDB Convention                           | 
-|     844 | STEERS ARMAGEDDON      | A Stunning Character Study of a Car And a Girl who must Succumb a Car in A MySQL Convention                          | +|     844 | STEERS ARMAGEDDON      | A Stunning Character Study of a Car And a Girl who must Succumb a Car in A MariaDB Convention                          | 
-|     119 | CAPER MOTIONS          | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention                                    | +|     119 | CAPER MOTIONS          | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MariaDB Convention                                    | 
-|     907 | TRANSLATION SUMMER     | A Touching Reflection of a Man And a Monkey who must Pursue a Womanizer in A MySQL Convention                        | +|     907 | TRANSLATION SUMMER     | A Touching Reflection of a Man And a Monkey who must Pursue a Womanizer in A MariaDB Convention                        | 
-|     899 | TOWERS HURRICANE       | A Fateful Display of a Monkey And a Car who must Sink a Husband in A MySQL Convention                                | +|     899 | TOWERS HURRICANE       | A Fateful Display of a Monkey And a Car who must Sink a Husband in A MariaDB Convention                                | 
-|     918 | TWISTED PIRATES        | A Touching Display of a Frisbee And a Boat who must Kill a Girl in A MySQL Convention                                | +|     918 | TWISTED PIRATES        | A Touching Display of a Frisbee And a Boat who must Kill a Girl in A MariaDB Convention                                | 
-|     933 | VAMPIRE WHALE          | A Epic Story of a Lumberjack And a Monkey who must Confront a Pioneer in A MySQL Convention                          | +|     933 | VAMPIRE WHALE          | A Epic Story of a Lumberjack And a Monkey who must Confront a Pioneer in A MariaDB Convention                          | 
-|     716 | REAP UNFAITHFUL        | A Thrilling Epistle of a Composer And a Sumo Wrestler who must Challenge a Mad Cow in A MySQL Convention             | +|     716 | REAP UNFAITHFUL        | A Thrilling Epistle of a Composer And a Sumo Wrestler who must Challenge a Mad Cow in A MariaDB Convention             | 
-|     727 | RESURRECTION SILVERADO | A Epic Yarn of a Robot And a Explorer who must Challenge a Girl in A MySQL Convention                                | +|     727 | RESURRECTION SILVERADO | A Epic Yarn of a Robot And a Explorer who must Challenge a Girl in A MariaDB Convention                                | 
-|     809 | SLIPPER FIDELITY       | A Taut Reflection of a Secret Agent And a Man who must Redeem a Explorer in A MySQL Convention                       | +|     809 | SLIPPER FIDELITY       | A Taut Reflection of a Secret Agent And a Man who must Redeem a Explorer in A MariaDB Convention                       | 
-|     567 | MEET CHOCOLATE         | A Boring Documentary of a Dentist And a Butler who must Confront a Monkey in A MySQL Convention                      | +|     567 | MEET CHOCOLATE         | A Boring Documentary of a Dentist And a Butler who must Confront a Monkey in A MariaDB Convention                      | 
-|     129 | CAUSE DATE             | A Taut Tale of a Explorer And a Pastry Chef who must Conquer a Hunter in A MySQL Convention                          | +|     129 | CAUSE DATE             | A Taut Tale of a Explorer And a Pastry Chef who must Conquer a Hunter in A MariaDB Convention                          | 
-|     261 | DUFFEL APOCALYPSE      | A Emotional Display of a Boat And a Explorer who must Challenge a Madman in A MySQL Convention                       | +|     261 | DUFFEL APOCALYPSE      | A Emotional Display of a Boat And a Explorer who must Challenge a Madman in A MariaDB Convention                       | 
-|     213 | DATE SPEED             | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention                          | +|     213 | DATE SPEED             | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MariaDB Convention                          | 
-|      11 | ALAMO VIDEOTAPE        | A Boring Epistle of a Butler And a Cat who must Fight a Pastry Chef in A MySQL Convention                            | +|      11 | ALAMO VIDEOTAPE        | A Boring Epistle of a Butler And a Cat who must Fight a Pastry Chef in A MariaDB Convention                            | 
-|     201 | CYCLONE FAMILY         | A Lacklusture Drama of a Student And a Monkey who must Sink a Womanizer in A MySQL Convention                        | +|     201 | CYCLONE FAMILY         | A Lacklusture Drama of a Student And a Monkey who must Sink a Womanizer in A MariaDB Convention                        | 
-|     352 | GATHERING CALENDAR     | A Intrepid Tale of a Pioneer And a Moose who must Conquer a Frisbee in A MySQL Convention                            | +|     352 | GATHERING CALENDAR     | A Intrepid Tale of a Pioneer And a Moose who must Conquer a Frisbee in A MariaDB Convention                            | 
-|     398 | HANOVER GALAXY         | A Stunning Reflection of a Girl And a Secret Agent who must Succumb a Boy in A MySQL Convention                      | +|     398 | HANOVER GALAXY         | A Stunning Reflection of a Girl And a Secret Agent who must Succumb a Boy in A MariaDB Convention                      | 
-|     426 | HOME PITY              | A Touching Panorama of a Man And a Secret Agent who must Challenge a Teacher in A MySQL Convention                   | +|     426 | HOME PITY              | A Touching Panorama of a Man And a Secret Agent who must Challenge a Teacher in A MariaDB Convention                   | 
-|      72 | BILL OTHERS            | A Stunning Saga of a Mad Scientist And a Forensic Psychologist who must Challenge a Squirrel in A MySQL Convention   | +|      72 | BILL OTHERS            | A Stunning Saga of a Mad Scientist And a Forensic Psychologist who must Challenge a Squirrel in A MariaDB Convention   | 
-|     845 | STEPMOM DREAM          | A Touching Epistle of a Crocodile And a Teacher who must Build a Forensic Psychologist in A MySQL Convention         | +|     845 | STEPMOM DREAM          | A Touching Epistle of a Crocodile And a Teacher who must Build a Forensic Psychologist in A MariaDB Convention         | 
-|     870 | SWARM GOLD             | A Insightful Panorama of a Crocodile And a Boat who must Conquer a Sumo Wrestler in A MySQL Convention               | +|     870 | SWARM GOLD             | A Insightful Panorama of a Crocodile And a Boat who must Conquer a Sumo Wrestler in A MariaDB Convention               | 
-|     466 | INTOLERABLE INTENTIONS | A Awe-Inspiring Story of a Monkey And a Pastry Chef who must Succumb a Womanizer in A MySQL Convention               | +|     466 | INTOLERABLE INTENTIONS | A Awe-Inspiring Story of a Monkey And a Pastry Chef who must Succumb a Womanizer in A MariaDB Convention               | 
-|     974 | WILD APOLLO            | A Beautiful Story of a Monkey And a Sumo Wrestler who must Conquer a A Shark in A MySQL Convention                   | +|     974 | WILD APOLLO            | A Beautiful Story of a Monkey And a Sumo Wrestler who must Conquer a A Shark in A MariaDB Convention                   | 
-|     980 | WIZARD COLDBLOODED     | A Lacklusture Display of a Robot And a Girl who must Defeat a Sumo Wrestler in A MySQL Convention                    | +|     980 | WIZARD COLDBLOODED     | A Lacklusture Display of a Robot And a Girl who must Defeat a Sumo Wrestler in A MariaDB Convention                    | 
-|     551 | MAIDEN HOME            | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention              | +|     551 | MAIDEN HOME            | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MariaDB Convention              | 
-|     987 | WORDS HUNTER           | A Action-Packed Reflection of a Composer And a Mad Scientist who must Face a Pioneer in A MySQL Convention           | +|     987 | WORDS HUNTER           | A Action-Packed Reflection of a Composer And a Mad Scientist who must Face a Pioneer in A MariaDB Convention           | 
-|     183 | CONVERSATION DOWNHILL  | A Taut Character Study of a Husband And a Waitress who must Sink a Squirrel in A MySQL Convention                    | +|     183 | CONVERSATION DOWNHILL  | A Taut Character Study of a Husband And a Waitress who must Sink a Squirrel in A MariaDB Convention                    | 
-|     804 | SLEEPING SUSPECTS      | A Stunning Reflection of a Sumo Wrestler And a Explorer who must Sink a Frisbee in A MySQL Convention                | +|     804 | SLEEPING SUSPECTS      | A Stunning Reflection of a Sumo Wrestler And a Explorer who must Sink a Frisbee in A MariaDB Convention                | 
-|     576 | MIGHTY LUCK            | A Astounding Epistle of a Mad Scientist And a Pioneer who must Escape a Database Administrator in A MySQL Convention | +|     576 | MIGHTY LUCK            | A Astounding Epistle of a Mad Scientist And a Pioneer who must Escape a Database Administrator in A MariaDB Convention | 
-|     733 | RIVER OUTLAW           | A Thrilling Character Study of a Squirrel And a Lumberjack who must Face a Hunter in A MySQL Convention              | +|     733 | RIVER OUTLAW           | A Thrilling Character Study of a Squirrel And a Lumberjack who must Face a Hunter in A MariaDB Convention              | 
-|     303 | FANTASY TROOPERS       | A Touching Saga of a Teacher And a Monkey who must Overcome a Secret Agent in A MySQL Convention                     | +|     303 | FANTASY TROOPERS       | A Touching Saga of a Teacher And a Monkey who must Overcome a Secret Agent in A MariaDB Convention                     | 
-|     937 | VARSITY TRIP           | A Action-Packed Character Study of a Astronaut And a Explorer who must Reach a Monkey in A MySQL Convention          | +|     937 | VARSITY TRIP           | A Action-Packed Character Study of a Astronaut And a Explorer who must Reach a Monkey in A MariaDB Convention          | 
-|     782 | SHAKESPEARE SADDLE     | A Fast-Paced Panorama of a Lumberjack And a Database Administrator who must Defeat a Madman in A MySQL Convention    | +|     782 | SHAKESPEARE SADDLE     | A Fast-Paced Panorama of a Lumberjack And a Database Administrator who must Defeat a Madman in A MariaDB Convention    | 
-|     114 | CAMELOT VACATION       | A Touching Character Study of a Woman And a Waitress who must Battle a Pastry Chef in A MySQL Convention             | +|     114 | CAMELOT VACATION       | A Touching Character Study of a Woman And a Waitress who must Battle a Pastry Chef in A MariaDB Convention             | 
-|     971 | WHALE BIKINI           | A Intrepid Story of a Pastry Chef And a Database Administrator who must Kill a Feminist in A MySQL Convention        | +|     971 | WHALE BIKINI           | A Intrepid Story of a Pastry Chef And a Database Administrator who must Kill a Feminist in A MariaDB Convention        | 
-|     822 | SOUP WISDOM            | A Fast-Paced Display of a Robot And a Butler who must Defeat a Butler in A MySQL Convention                          | +|     822 | SOUP WISDOM            | A Fast-Paced Display of a Robot And a Butler who must Defeat a Butler in A MariaDB Convention                          | 
-|     107 | BUNCH MINDS            | A Emotional Story of a Feminist And a Feminist who must Escape a Pastry Chef in A MySQL Convention                   | +|     107 | BUNCH MINDS            | A Emotional Story of a Feminist And a Feminist who must Escape a Pastry Chef in A MariaDB Convention                   | 
-|     750 | RUN PACIFIC            | A Touching Tale of a Cat And a Pastry Chef who must Conquer a Pastry Chef in A MySQL Convention                      |+|     750 | RUN PACIFIC            | A Touching Tale of a Cat And a Pastry Chef who must Conquer a Pastry Chef in A MariaDB Convention                      |
 +---------+------------------------+----------------------------------------------------------------------------------------------------------------------+ +---------+------------------------+----------------------------------------------------------------------------------------------------------------------+
 50 rows in set (0.01 sec) 50 rows in set (0.01 sec)
  
-mysql>+MariaDB [(none)]>
 </code> </code>
  
 <code> <code>
-mysql> SELECT film_id,title,description FROM film_text WHERE MATCH(title,description) AGAINST('MySQL' WITH QUERY EXPANSION);+MariaDB [(none)]> SELECT film_id,title,description FROM film_text WHERE MATCH(title,description) AGAINST('MariaDB' WITH QUERY EXPANSION);
 ... ...
 |     113 | CALIFORNIA BIRDS            | A Thrilling Yarn of a Database Administrator And a Robot who must Battle a Database Administrator in Ancient India                 | |     113 | CALIFORNIA BIRDS            | A Thrilling Yarn of a Database Administrator And a Robot who must Battle a Database Administrator in Ancient India                 |
Ligne 748: Ligne 753:
 999 rows in set (0.02 sec) 999 rows in set (0.02 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 756: Ligne 761:
  
 <code> <code>
-mysql> SHOW VARIABLES LIKE 'ft_min_word_len';+MariaDB [(none)]> SHOW VARIABLES LIKE 'ft_min_word_len';
 +-----------------+-------+ +-----------------+-------+
 | Variable_name   | Value | | Variable_name   | Value |
Ligne 764: Ligne 769:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql> SHOW VARIABLES LIKE 'ft_max_word_len';+MariaDB [(none)]> SHOW VARIABLES LIKE 'ft_max_word_len';
 +-----------------+-------+ +-----------------+-------+
 | Variable_name   | Value | | Variable_name   | Value |
Ligne 772: Ligne 777:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql> SHOW VARIABLES LIKE 'ft_stopword_list';+MariaDB [(none)]> SHOW VARIABLES LIKE 'ft_stopword_list';
 Empty set (0.00 sec) Empty set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 La dernière variable peut contenir une liste de mots qui ne seront pas indexés. Notez que chaque fois que vous modifiez une des ces variables, il est nécessaire de reconstruire l'index FULLTEXT avec la commande REPAIR TABLE table QUICK; La dernière variable peut contenir une liste de mots qui ne seront pas indexés. Notez que chaque fois que vous modifiez une des ces variables, il est nécessaire de reconstruire l'index FULLTEXT avec la commande REPAIR TABLE table QUICK;
-</note>+</WRAP>
  
 ==Limitations== ==Limitations==
Ligne 796: Ligne 802:
  
 <code> <code>
-mysql> EXPLAIN SELECT film_id,title,description FROM film_text WHERE MATCH(title,description) AGAINST('MySQL')\G+MariaDB [(none)]> EXPLAIN SELECT film_id,title,description FROM film_text WHERE MATCH(title,description) AGAINST('MariaDB')\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 810: Ligne 816:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
 La sortie de la commande démontre 10 colonnes dont les plus importantes sont **type**, **possible_keys**, **keys**, **key_len**, **rows** et **extra** : La sortie de la commande démontre 10 colonnes dont les plus importantes sont **type**, **possible_keys**, **keys**, **key_len**, **rows** et **extra** :
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Pour l'explication des autres colonnes, voir **[[http://dev.mysql.com/doc/refman/5.0/fr/explain.html|ce lien]]**. Pour l'explication des autres colonnes, voir **[[http://dev.mysql.com/doc/refman/5.0/fr/explain.html|ce lien]]**.
-</note>+</WRAP>
  
 ====La Colonne type==== ====La Colonne type====
Ligne 828: Ligne 835:
  
 <code> <code>
-mysql> EXPLAIN SELECT * FROM film_text WHERE title LIKE 'The%'\G+MariaDB [(none)]> EXPLAIN SELECT * FROM film_text WHERE title LIKE 'The%'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 842: Ligne 849:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
 <code> <code>
-mysql> SELECT * FROM film_text WHERE title LIKE 'The%'\G+MariaDB [(none)]> SELECT * FROM film_text WHERE title LIKE 'The%'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
     film_id: 886     film_id: 886
Ligne 853: Ligne 860:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 861: Ligne 868:
  
 <code> <code>
-mysql> EXPLAIN SELECT category_id FROM category\G+MariaDB [(none)]> EXPLAIN SELECT category_id FROM category\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 875: Ligne 882:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
 <code> <code>
-mysql> SELECT category_id FROM category\G+MariaDB [(none)]> SELECT category_id FROM category\G
 *************************** 1. row *************************** *************************** 1. row ***************************
 category_id: 1 category_id: 1
Ligne 914: Ligne 921:
 16 rows in set (0.00 sec) 16 rows in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 922: Ligne 929:
  
 <code> <code>
-mysql> EXPLAIN SELECT * FROM category WHERE category_id > 50\G+MariaDB [(none)]> EXPLAIN SELECT * FROM category WHERE category_id > 50\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 936: Ligne 943:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
 <code> <code>
-mysql> SELECT * FROM category WHERE category_id > 50\G+MariaDB [(none)]> SELECT * FROM category WHERE category_id > 50\G
 Empty set (0.01 sec) Empty set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 951: Ligne 958:
  
 <code> <code>
-mysql> EXPLAIN SELECT * FROM rental WHERE rental_id > 10 OR inventory_id < 100\G+MariaDB [(none)]> EXPLAIN SELECT * FROM rental WHERE rental_id > 10 OR inventory_id < 100\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 965: Ligne 972:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
 <code> <code>
-mysql> SELECT * FROM rental WHERE rental_id > 10 OR inventory_id < 100\G+MariaDB [(none)]> SELECT * FROM rental WHERE rental_id > 10 OR inventory_id < 100\G
 ... ...
 *************************** 13776. row *************************** *************************** 13776. row ***************************
Ligne 1011: Ligne 1018:
  
 <code> <code>
-mysql> EXPLAIN SELECT rental_date FROM rental INNER JOIN customer USING (customer_id) WHERE customer_id=1\G+MariaDB [(none)]> EXPLAIN SELECT rental_date FROM rental INNER JOIN customer USING (customer_id) WHERE customer_id=1\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1036: Ligne 1043:
 2 rows in set (0.01 sec) 2 rows in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
 <code> <code>
-mysql> SELECT rental_date FROM rental INNER JOIN customer USING (customer_id) WHERE customer_id=1\G+MariaDB [(none)]> SELECT rental_date FROM rental INNER JOIN customer USING (customer_id) WHERE customer_id=1\G
 *************************** 1. row *************************** *************************** 1. row ***************************
 rental_date: 2005-05-25 11:30:37 rental_date: 2005-05-25 11:30:37
Ligne 1107: Ligne 1114:
 32 rows in set (0.00 sec) 32 rows in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Il existe une variante de ref, appelé ref_or_null. Dans ce cas, il y a une deuxième passe pour retrouver les valeurs NULL. Il existe une variante de ref, appelé ref_or_null. Dans ce cas, il y a une deuxième passe pour retrouver les valeurs NULL.
-</note>+</WRAP>
  
 ===eq_ref=== ===eq_ref===
Ligne 1119: Ligne 1127:
  
 <code> <code>
-mysql> EXPLAIN SELECT email FROM customer INNER JOIN rental USING (customer_id) WHERE rental_date > '2006-04-10 00:00:00' AND RENTAL_DATE < '2006-05-24 00:00:00'\G+MariaDB [(none)]> EXPLAIN SELECT email FROM customer INNER JOIN rental USING (customer_id) WHERE rental_date > '2006-04-10 00:00:00' AND RENTAL_DATE < '2006-05-24 00:00:00'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1144: Ligne 1152:
 2 rows in set (0.00 sec) 2 rows in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Ce type est le meilleur t(ype d'accès possible. Ce type est le meilleur t(ype d'accès possible.
-</note>+</WRAP>
  
 ===Cas Spécifiques=== ===Cas Spécifiques===
Ligne 1158: Ligne 1167:
  
 <code> <code>
-mysql> EXPLAIN SELECT * FROM category WHERE category_id=1\G+MariaDB [(none)]> EXPLAIN SELECT * FROM category WHERE category_id=1\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1172: Ligne 1181:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql> SELECT * FROM category WHERE category_id=1\G+MariaDB [(none)]> SELECT * FROM category WHERE category_id=1\G
 *************************** 1. row *************************** *************************** 1. row ***************************
 category_id: 1 category_id: 1
Ligne 1179: Ligne 1188:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql>+MariaDB [(none)]>
 </code> </code>
  
Ligne 1191: Ligne 1200:
  
 <code> <code>
-mysql> EXPLAIN SELECT COUNT(*) FROM film_text\G+MariaDB [(none)]> EXPLAIN SELECT COUNT(*) FROM film_text\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1205: Ligne 1214:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql> SELECT COUNT(*) FROM film_text\G+MariaDB [(none)]> SELECT COUNT(*) FROM film_text\G
 *************************** 1. row *************************** *************************** 1. row ***************************
 COUNT(*): 1000 COUNT(*): 1000
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 1232: Ligne 1241:
 [root@centos ~]# mysql -uroot -p [root@centos ~]# mysql -uroot -p
 Enter password:  Enter password: 
-Welcome to the MySQL monitor.  Commands end with ; or \g. +Welcome to the MariaDB monitor.  Commands end with ; or \g. 
-Your MySQL connection id is 8 +Your MariaDB connection id is 8 
-Server version: 5.5.33-cll-lve MySQL Community Server (GPL) by Atomicorp+Server version: 5.5.33-cll-lve MariaDB Community Server (GPL) by Atomicorp
  
 Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Ligne 1244: Ligne 1253:
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
-mysql> CREATE DATABASE world;+MariaDB [(none)]> CREATE DATABASE world;
 Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec)
  
-mysql> exit+MariaDB [(none)]> exit
 Bye Bye
 [root@centos ~]# gunzip world-db.tar.gz  [root@centos ~]# gunzip world-db.tar.gz 
Ligne 1258: Ligne 1267:
  
 <code> <code>
-mysql> USE world;+MariaDB [(none)]> USE world;
 Reading table information for completion of table and column names Reading table information for completion of table and column names
 You can turn off this feature to get a quicker startup with -A You can turn off this feature to get a quicker startup with -A
  
 Database changed Database changed
-mysql> ALTER TABLE City ADD INDEX idx_name_district(Name,District);+MariaDB [(none)]> ALTER TABLE City ADD INDEX idx_name_district(Name,District);
 Query OK, 4079 rows affected (0.11 sec) Query OK, 4079 rows affected (0.11 sec)
 Records: 4079  Duplicates: 0  Warnings: 0 Records: 4079  Duplicates: 0  Warnings: 0
  
-mysql> EXPLAIN SELECT * FROM City WHERE Name LIKE 'San%'\G+MariaDB [(none)]> EXPLAIN SELECT * FROM City WHERE Name LIKE 'San%'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1281: Ligne 1290:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Notez que la taille de l'index utilisé est de 35 octets. Notez que la taille de l'index utilisé est de 35 octets.
-</note>+</WRAP>
  
 ====La Colonne rows==== ====La Colonne rows====
Ligne 1293: Ligne 1303:
  
 <code> <code>
-mysql> EXPLAIN SELECT * FROM City CROSS JOIN Country\G+MariaDB [(none)]> EXPLAIN SELECT * FROM City CROSS JOIN Country\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1318: Ligne 1328:
 2 rows in set (0.00 sec) 2 rows in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important> +<WRAP center round important 60%> 
-Dans l'exemple ci-dessus, MySQL estime avoir besoin de parcourir 239*4079 lignes soit 974 881 enregistrements !! +**Important** : 
-</note>+Dans l'exemple ci-dessus, MariaDB estime avoir besoin de parcourir 239*4079 lignes soit 974 881 enregistrements !! 
 +</WRAP>
  
 Pour prouver qu'il s'agit bien d'une estimation, saisissez la requête suivante : Pour prouver qu'il s'agit bien d'une estimation, saisissez la requête suivante :
  
 <code> <code>
-mysql> EXPLAIN SELECT * FROM City WHERE Name LIKE 'San%'\G+MariaDB [(none)]> EXPLAIN SELECT * FROM City WHERE Name LIKE 'San%'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1342: Ligne 1353:
 1 row in set (0.05 sec) 1 row in set (0.05 sec)
  
-mysql> SELECT COUNT(*) FROM City WHERE Name LIKE 'San%'\G+MariaDB [(none)]> SELECT COUNT(*) FROM City WHERE Name LIKE 'San%'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
 COUNT(*): 110 COUNT(*): 110
 1 row in set (0.02 sec) 1 row in set (0.02 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Si vous vous rendez compte que les estimations sont largement erronées vous pouvez utilisez la commande ANALYZE TABLE pour mettre à jour les statistiques sur la table. D'une manière générale, plus élevée est la valeur de **rows**, plus lente sera la requête. Si vous vous rendez compte que les estimations sont largement erronées vous pouvez utilisez la commande ANALYZE TABLE pour mettre à jour les statistiques sur la table. D'une manière générale, plus élevée est la valeur de **rows**, plus lente sera la requête.
-</note>+</WRAP>
  
 ====La Colonne extra==== ====La Colonne extra====
Ligne 1365: Ligne 1377:
 =====La Commande EXPLAIN EXTENDED===== =====La Commande EXPLAIN EXTENDED=====
  
-La commande **EXPLAIN EXTENDED** est disponible dans MySQL depuis la version 5.1. EXPLAIN EXTENDED donne une approximation, en pourcentage par rapport à la valeur de **rows**, du nombre de lignes qui seront retournées lors de la requête :+La commande **EXPLAIN EXTENDED** est disponible dans MariaDB depuis la version 5.1. EXPLAIN EXTENDED donne une approximation, en pourcentage par rapport à la valeur de **rows**, du nombre de lignes qui seront retournées lors de la requête :
  
 <code> <code>
-mysql> EXPLAIN EXTENDED SELECT ID FROM City WHERE ID < 50\G+MariaDB [(none)]> EXPLAIN EXTENDED SELECT ID FROM City WHERE ID < 50\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1383: Ligne 1395:
 1 row in set, 1 warning (0.00 sec) 1 row in set, 1 warning (0.00 sec)
  
-mysql> SELECT COUNT(ID) FROM City WHERE ID < 50\G+MariaDB [(none)]> SELECT COUNT(ID) FROM City WHERE ID < 50\G
 *************************** 1. row *************************** *************************** 1. row ***************************
 COUNT(ID): 49 COUNT(ID): 49
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 1394: Ligne 1406:
  
 <code> <code>
-mysql> EXPLAIN EXTENDED SELECT Name FROM City WHERE CountryCode LIKE 'F%' AND district LIKE 'F%' AND population >100000\G+MariaDB [(none)]> EXPLAIN EXTENDED SELECT Name FROM City WHERE CountryCode LIKE 'F%' AND district LIKE 'F%' AND population >100000\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1409: Ligne 1421:
 1 row in set, 1 warning (0.00 sec) 1 row in set, 1 warning (0.00 sec)
  
-mysql> SELECT Name FROM City WHERE CountryCode LIKE 'F%' AND district LIKE 'F%' AND population >100000\G+MariaDB [(none)]> SELECT Name FROM City WHERE CountryCode LIKE 'F%' AND district LIKE 'F%' AND population >100000\G
 *************************** 1. row *************************** *************************** 1. row ***************************
 Name: Besançon Name: Besançon
 1 row in set (0.07 sec) 1 row in set (0.07 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 1420: Ligne 1432:
  
 <code> <code>
-mysql> EXPLAIN EXTENDED SELECT COUNT(*) FROM Country\G+MariaDB [(none)]> EXPLAIN EXTENDED SELECT COUNT(*) FROM Country\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1435: Ligne 1447:
 1 row in set, 1 warning (0.00 sec) 1 row in set, 1 warning (0.00 sec)
  
-mysql> SHOW WARNINGS\G+MariaDB [(none)]> SHOW WARNINGS\G
 *************************** 1. row *************************** *************************** 1. row ***************************
   Level: Note   Level: Note
Ligne 1442: Ligne 1454:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 1452: Ligne 1464:
  
 <code> <code>
-mysql> USE sakila;+MariaDB [(none)]> USE sakila;
 Reading table information for completion of table and column names Reading table information for completion of table and column names
 You can turn off this feature to get a quicker startup with -A You can turn off this feature to get a quicker startup with -A
  
 Database changed Database changed
-mysql> EXPLAIN SELECT * FROM rental WHERE TO_DAYS(CURRENT_DATE()) - TO_DAYS(rental_date) < 10\G+MariaDB [(none)]> EXPLAIN SELECT * FROM rental WHERE TO_DAYS(CURRENT_DATE()) - TO_DAYS(rental_date) < 10\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1471: Ligne 1483:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql> EXPLAIN SELECT * FROM rental WHERE rental_date > CURRENT_DATE() + INTERVAL 10 DAY\G+MariaDB [(none)]> EXPLAIN SELECT * FROM rental WHERE rental_date > CURRENT_DATE() + INTERVAL 10 DAY\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1485: Ligne 1497:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 La réécriture de la requête sans encapsuler une colonne dans une fonction produit une requête plus performante ( range > ALL ). La réécriture de la requête sans encapsuler une colonne dans une fonction produit une requête plus performante ( range > ALL ).
-</note>+</WRAP>
  
 ====Jointures==== ====Jointures====
  
-Quand MySQL effectue des jointures il le fait une à une et successivement. Par exemple, dans le cas de 4 tables, table1, table2, table3, table4, la table1 est jointe à la table2 produisant une table table12. La table12 est ensite jointe à la table3 produisant la table123. La table123 est ensute joite à la table4 pour produire la table1234.+Quand MariaDB effectue des jointures il le fait une à une et successivement. Par exemple, dans le cas de 4 tables, table1, table2, table3, table4, la table1 est jointe à la table2 produisant une table table12. La table12 est ensite jointe à la table3 produisant la table123. La table123 est ensuite jointe à la table4 pour produire la table1234.
  
-Dans le cas d'un INNER JOIN, MySQL peut décider de ne pas respecter cet ordre :+Dans le cas d'un INNER JOIN, MariaDB peut décider de ne pas respecter cet ordre :
  
 <code> <code>
-mysql> EXPLAIN SELECT email FROM customer INNER JOIN rental ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G+MariaDB [(none)]> EXPLAIN SELECT email FROM customer INNER JOIN rental ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1524: Ligne 1537:
 2 rows in set (0.01 sec) 2 rows in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 L'ordre de jointure ici est rental vers customer et non pas customer vers rental. L'ordre de jointure ici est rental vers customer et non pas customer vers rental.
-</note>+</WRAP>
  
 Pourquoi l'optimiseur a choisi d'inverser l'ordre de jointure ? Dans l'exemple précédent il faut parcourir 1 ligne. Forcez maintenant la jointure dans l'autre direction : Pourquoi l'optimiseur a choisi d'inverser l'ordre de jointure ? Dans l'exemple précédent il faut parcourir 1 ligne. Forcez maintenant la jointure dans l'autre direction :
  
 <code> <code>
-mysql> EXPLAIN SELECT email FROM customer STRAIGHT_JOIN rental ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G+MariaDB [(none)]> EXPLAIN SELECT email FROM customer STRAIGHT_JOIN rental ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1559: Ligne 1573:
 2 rows in set (0.00 sec) 2 rows in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
 Dans le cas ci-dessus, l'optimiseur a vu qu'il faut parcourir 577*1 lignes !! Dans le cas ci-dessus, l'optimiseur a vu qu'il faut parcourir 577*1 lignes !!
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Pour les jointure externes, LEFT JOIN et RIGHT JOIN, l'ordre est important. Pour les jointure externes, LEFT JOIN et RIGHT JOIN, l'ordre est important.
-</note>+</WRAP>
  
 ====Indexes==== ====Indexes====
Ligne 1572: Ligne 1587:
 ===USE INDEX=== ===USE INDEX===
  
-Il est possible d'indiquer à MySQL d'utiliser un index spécifique ou d'ignorer un index :+Il est possible d'indiquer à MariaDB d'utiliser un index spécifique ou d'ignorer un index :
  
 <code> <code>
-mysql> EXPLAIN SELECT email FROM customer INNER JOIN rental USE INDEX (idx_fk_customer_id) ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G+MariaDB [(none)]> EXPLAIN SELECT email FROM customer INNER JOIN rental USE INDEX (idx_fk_customer_id) ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1601: Ligne 1616:
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Dans le cas d'utilisation de la clause USE INDEX, l'auteur de la requête indique à l'optimiseur d'utiliser l'index passé en paramètre. Cependant l'optimiseur peut décider d'utiliser un autre index si celui-si s'avère plus approprié. Dans le cas ci-dessus l'optimiseur a été d'accord avec l'auteur. Dans le cas d'utilisation de la clause USE INDEX, l'auteur de la requête indique à l'optimiseur d'utiliser l'index passé en paramètre. Cependant l'optimiseur peut décider d'utiliser un autre index si celui-si s'avère plus approprié. Dans le cas ci-dessus l'optimiseur a été d'accord avec l'auteur.
-</note>+</WRAP>
  
 ===FORCE INDEX=== ===FORCE INDEX===
  
 <code> <code>
-mysql> EXPLAIN SELECT email FROM customer INNER JOIN rental FORCE INDEX (idx_fk_customer_id) ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G+MariaDB [(none)]> EXPLAIN SELECT email FROM customer INNER JOIN rental FORCE INDEX (idx_fk_customer_id) ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1634: Ligne 1650:
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Dans le cas d'utilisation de la clause FORCE INDEX, l'auteur de la requête indique à l'optimiseur d'utiliser l'index passé en paramètre. L'index sera utilisé sauf dans le cas où il n'est pas utilisable. Dans le cas d'utilisation de la clause FORCE INDEX, l'auteur de la requête indique à l'optimiseur d'utiliser l'index passé en paramètre. L'index sera utilisé sauf dans le cas où il n'est pas utilisable.
-</note>+</WRAP>
  
 ===IGNORE INDEX=== ===IGNORE INDEX===
  
 <code> <code>
-mysql> EXPLAIN SELECT email FROM customer INNER JOIN rental IGNORE INDEX (idx_fk_customer_id,rental_date) ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G+MariaDB [(none)]> EXPLAIN SELECT email FROM customer INNER JOIN rental IGNORE INDEX (idx_fk_customer_id,rental_date) ON customer.customer_id = rental.customer_id WHERE rental_date > '2006-04-10 00:00:00' AND rental_date < '2006-05-24 00:00:00'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1666: Ligne 1683:
 2 rows in set (0.01 sec) 2 rows in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important> +<WRAP center round important 60%> 
-Dans le cas d'utilisation de la clause USE INDEX, l'auteur de la requête indique à l'optimiseur de ne **pas** utiliser le ou les index passés en paramètre. De ce fait notez l'inversion de l'ordre de jointure. +**Important** : 
-</note>+Dans le cas d'utilisation de la clause IGNORE INDEX, l'auteur de la requête indique à l'optimiseur de ne **pas** utiliser le ou les index passés en paramètre. De ce fait notez l'inversion de l'ordre de jointure. 
 +</WRAP>
  
 ====CLAUSES LENTES==== ====CLAUSES LENTES====
Ligne 1678: Ligne 1696:
  
 <code> <code>
-mysql> SHOW TABLE STATUS WHERE Name = 'film_text'\G+MariaDB [(none)]> SHOW TABLE STATUS WHERE Name = 'film_text'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            Name: film_text            Name: film_text
Ligne 1700: Ligne 1718:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql> EXPLAIN SELECT COUNT(*) FROM film_text\G+MariaDB [(none)]> EXPLAIN SELECT COUNT(*) FROM film_text\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 1714: Ligne 1732:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Dans le cas ci-dessus la valeur de la colonne **type** est **NULL** indiquant qu'aucun accès à la table n'est nécessaire. Dans le cas ci-dessus la valeur de la colonne **type** est **NULL** indiquant qu'aucun accès à la table n'est nécessaire.
-</note>+</WRAP>
  
 ====Sous-requêtes==== ====Sous-requêtes====
  
-MySQL exécute parfois très lentement des sous-requêtes. Privilégiez donc les jointures plutôt que des sous-requêtes :+MariaDB exécute parfois très lentement des sous-requêtes. Privilégiez donc les jointures plutôt que des sous-requêtes :
  
 <code> <code>
-mysql> USE world;+MariaDB [(none)]> USE world;
 Reading table information for completion of table and column names Reading table information for completion of table and column names
 You can turn off this feature to get a quicker startup with -A You can turn off this feature to get a quicker startup with -A
  
 Database changed Database changed
-mysql> SELECT Language FROM CountryLanguage WHERE CountryCode = (SELECT Code FROM Country WHERE Name='France');+MariaDB [(none)]> SELECT Language FROM CountryLanguage WHERE CountryCode = (SELECT Code FROM Country WHERE Name='France');
 +------------+ +------------+
 | Language   | | Language   |
Ligne 1744: Ligne 1763:
 6 rows in set (0.03 sec) 6 rows in set (0.03 sec)
  
-mysql> SELECT Language FROM CountryLanguage INNER JOIN Country ON Code=CountryCode WHERE Name='France';+MariaDB [(none)]> SELECT Language FROM CountryLanguage INNER JOIN Country ON Code=CountryCode WHERE Name='France';
 +------------+ +------------+
 | Language   | | Language   |
Ligne 1757: Ligne 1776:
 6 rows in set (0.01 sec) 6 rows in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 1767: Ligne 1786:
  
 <code> <code>
-mysql> SHOW GLOBAL VARIABLES LIKE 'key_buffer_size';+MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'key_buffer_size';
 +-----------------+---------+ +-----------------+---------+
 | Variable_name   | Value   | | Variable_name   | Value   |
Ligne 1775: Ligne 1794:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql> SHOW GLOBAL STATUS LIKE 'Key_%';+MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Key_%';
 +------------------------+-------+ +------------------------+-------+
 | Variable_name          | Value | | Variable_name          | Value |
Ligne 1789: Ligne 1808:
 7 rows in set (0.01 sec) 7 rows in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 La variable **Key_reads** indique le nombre de requêtes de lectures qui n'ont pas pu être satisfaites par le cache. La variable **Key_read_requests** indique le nombre de lectures totale. La formule (1 - Key_reads / Key_read_requests ) * 100 donne une indication de l'efficacité du cache. Dans notre cas la valeur est de 76,92%. Une valeur basse indique qu'il faut augmenter la taille de key_buffer_size. La variable **Key_reads** indique le nombre de requêtes de lectures qui n'ont pas pu être satisfaites par le cache. La variable **Key_read_requests** indique le nombre de lectures totale. La formule (1 - Key_reads / Key_read_requests ) * 100 donne une indication de l'efficacité du cache. Dans notre cas la valeur est de 76,92%. Une valeur basse indique qu'il faut augmenter la taille de key_buffer_size.
-</note>+</WRAP>
  
 ===InnoDB== ===InnoDB==
Ligne 1817: Ligne 1837:
  
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Il est possible de faire un partitionnement vertical et un partitionnement horizontal sur la même table. Il est aussi possible de faire des partitions de partitions. Il est possible de faire un partitionnement vertical et un partitionnement horizontal sur la même table. Il est aussi possible de faire des partitions de partitions.
-</note>+</WRAP>
  
 Le partitionnement apporte trois avantages : Le partitionnement apporte trois avantages :
Ligne 1850: Ligne 1871:
  
 <code> <code>
-mysql> CREATE DATABASE transactions;+MariaDB [(none)]> CREATE DATABASE transactions;
 Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec)
  
-mysql> USE transactions;+MariaDB [(none)]> USE transactions;
 Database changed Database changed
-mysql+MariaDB [(none)]
  
-mysql> CREATE TABLE transac+MariaDB [(none)]> CREATE TABLE transac
     -> (     -> (
     ->    id INT UNSIGNED PRIMARY KEY,     ->    id INT UNSIGNED PRIMARY KEY,
Ligne 1866: Ligne 1887:
 Query OK, 0 rows affected (0.04 sec) Query OK, 0 rows affected (0.04 sec)
  
-mysql>+MariaDB [(none)]>
 </code> </code>
  
Ligne 1895: Ligne 1916:
  
 <code> <code>
-mysql> CREATE TABLE transac_part+MariaDB [(none)]> CREATE TABLE transac_part
     -> (     -> (
     ->    id INT UNSIGNED NOT NULL,     ->    id INT UNSIGNED NOT NULL,
Ligne 1917: Ligne 1938:
 Query OK, 0 rows affected (0.13 sec) Query OK, 0 rows affected (0.13 sec)
  
-mysql>+MariaDB [(none)]>
 </code> </code>
  
-<note warning>+<WRAP center round important 60%>
 L'ordre de définition des partitions est important. Les informations liées aux partitions sont stockées dans la table **information_schema.partitions**. L'ordre de définition des partitions est important. Les informations liées aux partitions sont stockées dans la table **information_schema.partitions**.
-</note>+</WRAP>
  
 Créez ensuite une procédure pour injecter des données dans la table **transac** : Créez ensuite une procédure pour injecter des données dans la table **transac** :
Ligne 1951: Ligne 1972:
  
 <code> <code>
-mysql> DELIMITER // +MariaDB [(none)]> DELIMITER // 
-mysql> CREATE PROCEDURE remplir_transaction(nbTransacs INT)+MariaDB [(none)]> CREATE PROCEDURE remplir_transaction(nbTransacs INT)
     -> BEGIN     -> BEGIN
     ->    DECLARE i INT DEFAULT 1;     ->    DECLARE i INT DEFAULT 1;
Ligne 1972: Ligne 1993:
 Query OK, 0 rows affected (0.05 sec) Query OK, 0 rows affected (0.05 sec)
  
-mysql> DELIMITER ; +MariaDB [(none)]> DELIMITER ; 
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 1979: Ligne 2000:
  
 <code> <code>
-mysql> CALL remplir_transaction(200000);+MariaDB [(none)]> CALL remplir_transaction(200000);
 ^CCtrl-C -- sending "KILL QUERY 2" to server ... ^CCtrl-C -- sending "KILL QUERY 2" to server ...
 Ctrl-C -- query aborted. Ctrl-C -- query aborted.
-mysql> SELECT COUNT(*) FROM transac;+MariaDB [(none)]> SELECT COUNT(*) FROM transac;
 +----------+ +----------+
 | COUNT(*) | | COUNT(*) |
Ligne 1990: Ligne 2011:
 1 row in set (0.09 sec) 1 row in set (0.09 sec)
  
-mysql>+MariaDB [(none)]>
  
 Insérez maintenant les mêmes données dans la table **transac_part** : Insérez maintenant les mêmes données dans la table **transac_part** :
  
 <code> <code>
-mysql> INSERT INTO transac_part SELECT * FROM transac;+MariaDB [(none)]> INSERT INTO transac_part SELECT * FROM transac;
 Query OK, 191939 rows affected (3.63 sec) Query OK, 191939 rows affected (3.63 sec)
 Records: 191939  Duplicates: 0  Warnings: 0 Records: 191939  Duplicates: 0  Warnings: 0
  
-mysql> SELECT COUNT(*) FROM transac_part;+MariaDB [(none)]> SELECT COUNT(*) FROM transac_part;
 +----------+ +----------+
 | COUNT(*) | | COUNT(*) |
Ligne 2007: Ligne 2028:
 1 row in set (0.14 sec) 1 row in set (0.14 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2013: Ligne 2034:
  
 <code> <code>
-mysql> SELECT SUM(montant), AVG(montant) FROM transac WHERE jour BETWEEN '1998-01-01' AND '1998-12-31';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac WHERE jour BETWEEN '1998-01-01' AND '1998-12-31';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2021: Ligne 2042:
 1 row in set (0.17 sec) 1 row in set (0.17 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1998-01-01' AND '1998-12-31';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1998-01-01' AND '1998-12-31';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2033: Ligne 2054:
  
 <code> <code>
-mysql> EXPLAIN PARTITIONS SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1998-01-01' AND '1998-12-31'\G+MariaDB [(none)]> EXPLAIN PARTITIONS SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1998-01-01' AND '1998-12-31'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 2048: Ligne 2069:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql>+MariaDB [(none)]>
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Notez que la valeur de la colonne **partitions** est **p3**. Notez que la valeur de la colonne **partitions** est **p3**.
-</note>+</WRAP>
  
 Evidemment, plus qu'il y a de partitions à consulter, moins important est le gains en performance : Evidemment, plus qu'il y a de partitions à consulter, moins important est le gains en performance :
  
 <code> <code>
-mysql> SELECT SUM(montant), AVG(montant) FROM transac WHERE jour BETWEEN '1996-01-01' AND '2000-12-31';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac WHERE jour BETWEEN '1996-01-01' AND '2000-12-31';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2066: Ligne 2088:
 1 row in set (0.18 sec) 1 row in set (0.18 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1996-01-01' AND '2000-12-31';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1996-01-01' AND '2000-12-31';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2074: Ligne 2096:
 1 row in set (0.16 sec) 1 row in set (0.16 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2080: Ligne 2102:
  
 <code> <code>
-mysql> SELECT SUM(montant), AVG(montant) FROM transac;+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac;
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2088: Ligne 2110:
 1 row in set (0.16 sec) 1 row in set (0.16 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part;+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part;
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2096: Ligne 2118:
 1 row in set (0.20 sec) 1 row in set (0.20 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2102: Ligne 2124:
  
 <code> <code>
-mysql> DELETE FROM transac_part WHERE jour BETWEEN '1996-01-01' AND '1996-12-31';+MariaDB [(none)]> DELETE FROM transac_part WHERE jour BETWEEN '1996-01-01' AND '1996-12-31';
 Query OK, 17680 rows affected (0.18 sec) Query OK, 17680 rows affected (0.18 sec)
  
-mysql> ALTER TABLE transac_part DROP PARTITION p1;+MariaDB [(none)]> ALTER TABLE transac_part DROP PARTITION p1;
 Query OK, 0 rows affected (0.10 sec) Query OK, 0 rows affected (0.10 sec)
 Records: 0  Duplicates: 0  Warnings: 0 Records: 0  Duplicates: 0  Warnings: 0
  
-mysql+MariaDB [(none)]
 </code> </code>
 ===LAB #3 - Partitionnement par Listes=== ===LAB #3 - Partitionnement par Listes===
Ligne 2124: Ligne 2146:
  
 <code> <code>
-mysql> TRUNCATE TABLE transac;+MariaDB [(none)]> TRUNCATE TABLE transac;
 Query OK, 0 rows affected (0.17 sec) Query OK, 0 rows affected (0.17 sec)
  
-mysql> DROP TABLE transac_part;+MariaDB [(none)]> DROP TABLE transac_part;
 Query OK, 0 rows affected (0.09 sec) Query OK, 0 rows affected (0.09 sec)
  
-mysql>+MariaDB [(none)]>
 </code> </code>
  
Ligne 2136: Ligne 2158:
  
 <code> <code>
-mysql> CREATE TABLE transac_part+MariaDB [(none)]> CREATE TABLE transac_part
     -> (     -> (
     ->    id INT UNSIGNED NOT NULL,     ->    id INT UNSIGNED NOT NULL,
Ligne 2154: Ligne 2176:
  
 <code> <code>
-mysql> CALL remplir_transaction(10000000);+MariaDB [(none)]> CALL remplir_transaction(10000000);
 ^CCtrl-C -- sending "KILL QUERY 2" to server ... ^CCtrl-C -- sending "KILL QUERY 2" to server ...
 Ctrl-C -- query aborted. Ctrl-C -- query aborted.
-mysql> INSERT INTO transac_part SELECT * FROM transac;+MariaDB [(none)]> INSERT INTO transac_part SELECT * FROM transac;
 Query OK, 52193 rows affected (0.57 sec) Query OK, 52193 rows affected (0.57 sec)
 Records: 52193  Duplicates: 0  Warnings: 0 Records: 52193  Duplicates: 0  Warnings: 0
  
-mysql>+MariaDB [(none)]>
 </code> </code>
  
Ligne 2167: Ligne 2189:
  
 <code> <code>
-mysql> SELECT SUM(montant), AVG(montant) FROM transac WHERE codePays IN ('FR','BE','UK');+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac WHERE codePays IN ('FR','BE','UK');
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2175: Ligne 2197:
 1 row in set (0.07 sec) 1 row in set (0.07 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays IN (1, 2, 3);+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays IN (1, 2, 3);
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2183: Ligne 2205:
 1 row in set (0.04 sec) 1 row in set (0.04 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2191: Ligne 2213:
  
 <code> <code>
-mysql> SELECT SUM(montant), AVG(montant) FROM transac WHERE codePays = 'JP';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac WHERE codePays = 'JP';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2199: Ligne 2221:
 1 row in set (0.05 sec) 1 row in set (0.05 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays = 6;+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays = 6;
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2207: Ligne 2229:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2218: Ligne 2240:
  
 <code> <code>
-mysql> DROP TABLE transac_part;+MariaDB [(none)]> DROP TABLE transac_part;
 Query OK, 0 rows affected (0.03 sec) Query OK, 0 rows affected (0.03 sec)
  
-mysql>  +MariaDB [(none)]>  
-mysql> CREATE TABLE transac_part+MariaDB [(none)]> CREATE TABLE transac_part
     -> (     -> (
     ->    id INT UNSIGNED NOT NULL,     ->    id INT UNSIGNED NOT NULL,
Ligne 2231: Ligne 2253:
 Query OK, 0 rows affected (0.07 sec) Query OK, 0 rows affected (0.07 sec)
  
-mysql>  +MariaDB [(none)]>  
-mysql>  +MariaDB [(none)]>  
-mysql> INSERT INTO transac_part SELECT * FROM transac;+MariaDB [(none)]> INSERT INTO transac_part SELECT * FROM transac;
 Query OK, 52193 rows affected (0.85 sec) Query OK, 52193 rows affected (0.85 sec)
 Records: 52193  Duplicates: 0  Warnings: 0 Records: 52193  Duplicates: 0  Warnings: 0
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Notez qu'ici on indique le champs de référence **jour** et le nombre de partitions désirées. Notez qu'ici on indique le champs de référence **jour** et le nombre de partitions désirées.
-</note>+</WRAP>
  
 Testez maintenant le gains de performance en utilisant les partitions : Testez maintenant le gains de performance en utilisant les partitions :
  
 <code> <code>
-mysql> SELECT SUM(montant), AVG(montant) FROM transac WHERE jour BETWEEN '1998-01-01' AND '1998-12-31';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac WHERE jour BETWEEN '1998-01-01' AND '1998-12-31';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2255: Ligne 2278:
 1 row in set (0.09 sec) 1 row in set (0.09 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1998-01-01' AND '1998-12-31';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1998-01-01' AND '1998-12-31';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2263: Ligne 2286:
 1 row in set (0.08 sec) 1 row in set (0.08 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Notez qu'ici le gains de performance est minime. Notez qu'ici le gains de performance est minime.
-</note>+</WRAP>
  
 Le gains de performance est minime parce que toutes les partitions ont été scannées : Le gains de performance est minime parce que toutes les partitions ont été scannées :
  
 <code> <code>
-mysql> EXPLAIN PARTITIONS SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1998-01-01' AND '1998-12-31'\G+MariaDB [(none)]> EXPLAIN PARTITIONS SELECT SUM(montant), AVG(montant) FROM transac_part WHERE jour BETWEEN '1998-01-01' AND '1998-12-31'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 2288: Ligne 2312:
 1 row in set (0.00 sec) 1 row in set (0.00 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Le partitionnement par hachage n'est efficace que dans le cas ou le hash est généré à partir d'une colonne de type entier. Le partitionnement par hachage n'est efficace que dans le cas ou le hash est généré à partir d'une colonne de type entier.
-</note>+</WRAP>
  
 Pour prouver ce point, recréez la table transac_part avec des partitions basées sur la colonne **codePays** : Pour prouver ce point, recréez la table transac_part avec des partitions basées sur la colonne **codePays** :
  
 <code> <code>
-mysql> DROP TABLE transac_part;+MariaDB [(none)]> DROP TABLE transac_part;
 Query OK, 0 rows affected (0.22 sec) Query OK, 0 rows affected (0.22 sec)
  
-mysql>  +MariaDB [(none)]>  
-mysql> CREATE TABLE transac_part+MariaDB [(none)]> CREATE TABLE transac_part
     -> (     -> (
     ->    id INT UNSIGNED NOT NULL,     ->    id INT UNSIGNED NOT NULL,
Ligne 2311: Ligne 2336:
 Query OK, 0 rows affected (0.23 sec) Query OK, 0 rows affected (0.23 sec)
  
-mysql>  +MariaDB [(none)]>  
-mysql> INSERT INTO transac_part SELECT * FROM transac;+MariaDB [(none)]> INSERT INTO transac_part SELECT * FROM transac;
 Query OK, 52193 rows affected (0.65 sec) Query OK, 52193 rows affected (0.65 sec)
 Records: 52193  Duplicates: 0  Warnings: 0 Records: 52193  Duplicates: 0  Warnings: 0
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2322: Ligne 2347:
  
 <code> <code>
-mysql> SELECT SUM(montant), AVG(montant) FROM transac WHERE codePays = 1;+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac WHERE codePays = 1;
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2330: Ligne 2355:
 1 row in set (0.04 sec) 1 row in set (0.04 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays = 1;+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays = 1;
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2338: Ligne 2363:
 1 row in set (0.02 sec) 1 row in set (0.02 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Cette fois-ci le gain est plus important. Cette fois-ci le gain est plus important.
-</note>+</WRAP>
 ===Partitionnement par Key=== ===Partitionnement par Key===
  
-Dans ce cas la partition à laquelle appartient un enregistrement est déterminée à partir de la valeur de retour d'une fonction définie par le serveur MySQL.+Dans ce cas la partition à laquelle appartient un enregistrement est déterminée à partir de la valeur de retour d'une fonction définie par le serveur MariaDB.
  
 Par exemple : Par exemple :
Ligne 2360: Ligne 2386:
 </file> </file>
  
-<note important>+<WRAP center round important 60%> 
 +**Important** :
 Dans ce cas, la clef n'est pas spécifiée. Le hachage est généré à partir de tous les champs de la clef primaire. Dans notre cas c'est le champ **id**. Puisqu'il y a 5 partitions, si le nombre de données est de 100 000, le serveur mettra exactement 20 000 enregistrements dans chaque partition. Dans ce cas, la clef n'est pas spécifiée. Le hachage est généré à partir de tous les champs de la clef primaire. Dans notre cas c'est le champ **id**. Puisqu'il y a 5 partitions, si le nombre de données est de 100 000, le serveur mettra exactement 20 000 enregistrements dans chaque partition.
-</note>+</WRAP>
  
 ===LAB #5 - Sous-partitionnement=== ===LAB #5 - Sous-partitionnement===
  
-Avec MySQL il est possible de créer des sous-partitions. Cependant il existe deux limitations :+Avec MariaDB il est possible de créer des sous-partitions. Cependant il existe deux limitations :
  
   * La partition de premier niveau doit être de type RANGE ou LIST,   * La partition de premier niveau doit être de type RANGE ou LIST,
Ligne 2377: Ligne 2404:
  
 <code> <code>
-mysql> DROP TABLE transac_part;+MariaDB [(none)]> DROP TABLE transac_part;
 Query OK, 0 rows affected (0.18 sec) Query OK, 0 rows affected (0.18 sec)
  
-mysql>  +MariaDB [(none)]>  
-mysql> CREATE TABLE transac_part+MariaDB [(none)]> CREATE TABLE transac_part
     -> (     -> (
     ->    id INT UNSIGNED NOT NULL,     ->    id INT UNSIGNED NOT NULL,
Ligne 2405: Ligne 2432:
 Query OK, 0 rows affected (1.37 sec) Query OK, 0 rows affected (1.37 sec)
  
-mysql>  +MariaDB [(none)]>  
-mysql> INSERT INTO transac_part SELECT * FROM transac;+MariaDB [(none)]> INSERT INTO transac_part SELECT * FROM transac;
 </code> </code>
  
Ligne 2412: Ligne 2439:
  
 <code> <code>
-mysql> SELECT SUM(montant), AVG(montant) FROM transac WHERE codePays=2 AND jour BETWEEN '2000-01-01' AND '2000-12-01';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac WHERE codePays=2 AND jour BETWEEN '2000-01-01' AND '2000-12-01';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2420: Ligne 2447:
 1 row in set (0.05 sec) 1 row in set (0.05 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays=2 AND jour BETWEEN '2000-01-01' AND '2000-12-01';+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays=2 AND jour BETWEEN '2000-01-01' AND '2000-12-01';
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2428: Ligne 2455:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac;+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac;
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2436: Ligne 2463:
 1 row in set (0.07 sec) 1 row in set (0.07 sec)
  
-mysql> SELECT SUM(montant), AVG(montant) FROM transac_part;+MariaDB [(none)]> SELECT SUM(montant), AVG(montant) FROM transac_part;
 +--------------+--------------+ +--------------+--------------+
 | SUM(montant) | AVG(montant) | | SUM(montant) | AVG(montant) |
Ligne 2444: Ligne 2471:
 1 row in set (0.09 sec) 1 row in set (0.09 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2450: Ligne 2477:
  
 <code> <code>
-mysql> EXPLAIN PARTITIONS SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays=2 AND jour BETWEEN '2000-01-01' AND '2000-12-01'\G+MariaDB [(none)]> EXPLAIN PARTITIONS SELECT SUM(montant), AVG(montant) FROM transac_part WHERE codePays=2 AND jour BETWEEN '2000-01-01' AND '2000-12-01'\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 2465: Ligne 2492:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql> EXPLAIN PARTITIONS SELECT SUM(montant), AVG(montant) FROM transac_part\G+MariaDB [(none)]> EXPLAIN PARTITIONS SELECT SUM(montant), AVG(montant) FROM transac_part\G
 *************************** 1. row *************************** *************************** 1. row ***************************
            id: 1            id: 1
Ligne 2480: Ligne 2507:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
 ====LAB #6 - Partitionnement Vertical==== ====LAB #6 - Partitionnement Vertical====
Ligne 2487: Ligne 2514:
  
 <code> <code>
-mysql> CREATE TABLE produit+MariaDB [(none)]> CREATE TABLE produit
     -> (     -> (
     ->    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,     ->    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
Ligne 2500: Ligne 2527:
  
 <code> <code>
-mysql> CREATE TABLE produit2+MariaDB [(none)]> CREATE TABLE produit2
     -> (     -> (
     ->    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,     ->    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
Ligne 2508: Ligne 2535:
 Query OK, 0 rows affected (0.04 sec) Query OK, 0 rows affected (0.04 sec)
  
-mysql>  +MariaDB [(none)]>  
-mysql> CREATE TABLE photo_produit+MariaDB [(none)]> CREATE TABLE photo_produit
     -> (     -> (
     ->    idProd INT UNIQUE NOT NULL,     ->    idProd INT UNIQUE NOT NULL,
Ligne 2516: Ligne 2543:
 Query OK, 0 rows affected (0.03 sec) Query OK, 0 rows affected (0.03 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2522: Ligne 2549:
  
 <code> <code>
-mysql> DELIMITER // +MariaDB [(none)]> DELIMITER // 
-mysql>  +MariaDB [(none)]>  
-mysql> CREATE PROCEDURE remplir_produit(nbProds INT)+MariaDB [(none)]> CREATE PROCEDURE remplir_produit(nbProds INT)
     -> BEGIN     -> BEGIN
     ->    DECLARE i INT DEFAULT 1;     ->    DECLARE i INT DEFAULT 1;
Ligne 2540: Ligne 2567:
 Query OK, 0 rows affected (0.10 sec) Query OK, 0 rows affected (0.10 sec)
  
-mysql>  +MariaDB [(none)]>  
-mysql> DELIMITER ; +MariaDB [(none)]> DELIMITER ; 
-mysql> CALL remplir_produit(10000);+MariaDB [(none)]> CALL remplir_produit(10000);
 ^CCtrl-C -- sending "KILL QUERY 3" to server ... ^CCtrl-C -- sending "KILL QUERY 3" to server ...
 Ctrl-C -- query aborted. Ctrl-C -- query aborted.
 ERROR 1317 (70100): Query execution was interrupted ERROR 1317 (70100): Query execution was interrupted
-mysql> SELECT COUNT(*) FROM produit;+MariaDB [(none)]> SELECT COUNT(*) FROM produit;
 +----------+ +----------+
 | COUNT(*) | | COUNT(*) |
Ligne 2554: Ligne 2581:
 1 row in set (0.02 sec) 1 row in set (0.02 sec)
  
-mysql> SELECT COUNT(*) FROM produit2;+MariaDB [(none)]> SELECT COUNT(*) FROM produit2;
 +----------+ +----------+
 | COUNT(*) | | COUNT(*) |
Ligne 2562: Ligne 2589:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql> SELECT COUNT(*) FROM photo_produit;+MariaDB [(none)]> SELECT COUNT(*) FROM photo_produit;
 +----------+ +----------+
 | COUNT(*) | | COUNT(*) |
Ligne 2570: Ligne 2597:
 1 row in set (0.01 sec) 1 row in set (0.01 sec)
  
-mysql+MariaDB [(none)]
 </code> </code>
  
Ligne 2577: Ligne 2604:
  
 <code> <code>
-mysql> SELECT id, libelle, prix FROM produit; +MariaDB [(none)]> SELECT id, libelle, prix FROM produit; 
-mysql> SELECT id, libelle, prix FROM produit2;+MariaDB [(none)]> SELECT id, libelle, prix FROM produit2;
 </code> </code>
  
Menu