Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
elearning:workbooks:mysql:my05a [2022/11/09 12:04] – admin | elearning: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 | + | La mémoire est un facteur critique pour le serveur |
====Disque Dur==== | ====Disque Dur==== | ||
Ligne 19: | Ligne 19: | ||
=====Système d' | =====Système d' | ||
- | MySQL est disponible pour Windows(tm), | + | MariaDB |
=====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, | + | Le cache des requêtes est utilisé par MariaDB |
* les écritures sont nombreuses, | * les écritures sont nombreuses, | ||
Ligne 32: | Ligne 32: | ||
< | < | ||
- | mysql> SHOW VARIABLES LIKE ' | + | MariaDB [(none)]> SHOW VARIABLES LIKE ' |
+------------------+-------+ | +------------------+-------+ | ||
| Variable_name | | Variable_name | ||
Ligne 40: | Ligne 40: | ||
1 row in set (0.00 sec) | 1 row in set (0.00 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
Ligne 55: | Ligne 55: | ||
====Requêtes==== | ====Requêtes==== | ||
- | MySQL recherche dans le cache chaque fois qu'il y a une requête SELECT. | + | MariaDB |
* SELECT prenom,nom FROM familles, | * SELECT prenom,nom FROM familles, | ||
Ligne 63: | Ligne 63: | ||
====Invalidations==== | ====Invalidations==== | ||
- | Le serveur | + | Le serveur |
====Effacements==== | ====Effacements==== | ||
- | Dans le cas où le cache n'est pas suffisant pour stocker une requête, | + | Dans le cas où le cache n'est pas suffisant pour stocker une requête, |
====Fragmentation==== | ====Fragmentation==== | ||
- | MySQL divise le cache en blocs mémoire d'une taille égale. Quand une requête est mise en cache, le serveur | + | MariaDB |
====Paramètres==== | ====Paramètres==== | ||
Ligne 89: | Ligne 89: | ||
< | < | ||
- | mysql> SHOW GLOBAL STATUS LIKE ' | + | MariaDB [(none)]> SHOW GLOBAL STATUS LIKE ' |
+-------------------------+-------+ | +-------------------------+-------+ | ||
| Variable_name | | Variable_name | ||
Ligne 115: | Ligne 115: | ||
< | < | ||
- | mysql> SHOW GLOBAL STATUS LIKE ' | + | MariaDB [(none)]> SHOW GLOBAL STATUS LIKE ' |
+---------------+-------+ | +---------------+-------+ | ||
| Variable_name | Value | | | Variable_name | Value | | ||
Ligne 142: | Ligne 142: | ||
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Pour défragmenter le cache, il convient d' | Pour défragmenter le cache, il convient d' | ||
- | </note> | + | </WRAP> |
=====Optimisation du Schéma===== | =====Optimisation du Schéma===== | ||
- | L' | + | L' |
* 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 |
====PROCEDURE ANALYSE==== | ====PROCEDURE ANALYSE==== | ||
- | Afin de vous aider, | + | Afin de vous aider, |
< | < | ||
- | 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 *************************** | ||
| | ||
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 *************************** | ||
| | ||
Ligne 268: | Ligne 269: | ||
6 rows in set (0.00 sec) | 6 rows in set (0.00 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
Ligne 286: | Ligne 287: | ||
< | < | ||
- | 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 | ||
</ | </ | ||
Ligne 308: | Ligne 309: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 326: | Ligne 327: | ||
< | < | ||
- | INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES (' | + | INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES (' |
</ | </ | ||
< | < | ||
- | mysql> INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES (' | + | MariaDB [(none)]> INSERT INTO employe (id , nom , ville , savoir1 , niv1 , savoir2 , niv2) VALUES (' |
Query OK, 1 row affected (0.00 sec) | Query OK, 1 row affected (0.00 sec) | ||
Ligne 341: | Ligne 342: | ||
< | < | ||
- | 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 | | 1 | Alex | Londres | Linux | ||
- | | 2 | Mathieu | Paris | Apache | + | | 2 | Mathieu | Paris | Apache |
- | | 3 | Thomas | + | | 3 | Thomas |
+----+---------+---------+---------+------+---------+------+ | +----+---------+---------+---------+------+---------+------+ | ||
3 rows in set (0.01 sec) | 3 rows in set (0.01 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
- | |||
- | < | ||
- | Normalisez la table connaissances.employe. | ||
- | </ | ||
=====Indexes===== | =====Indexes===== | ||
Ligne 371: | Ligne 368: | ||
* Avec CREATE INDEX le nom de l' | * Avec CREATE INDEX le nom de l' | ||
- | * Avec ALTER TABLE si le nom de l' | + | * Avec ALTER TABLE si le nom de l' |
* 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: | ||
< | < | ||
- | 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 ' | ERROR 1062 (23000): Duplicate entry ' | ||
- | 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)]> |
</ | </ | ||
Ligne 426: | Ligne 423: | ||
< | < | ||
- | 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 '' | + | ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB |
- | 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: | ||
< | < | ||
- | mysql> CREATE TABLE t2 (id INT, col1 VARCHAR(30), | + | MariaDB [(none)]> CREATE TABLE t2 (id INT, col1 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, | + | MariaDB [(none)]> CREATE INDEX index_col12 ON t2 (col1, |
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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
- | MySQL est capable d' | + | **Important** : |
- | </note> | + | MariaDB |
+ | </WRAP> | ||
===Index sur un Préfixe de Colonne=== | ===Index sur un Préfixe de Colonne=== | ||
< | < | ||
- | 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 ' | ERROR 1170 (42000): BLOB/TEXT column ' | ||
- | 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Pour les index stockant du texte, il est possible de ne créer l' | Pour les index stockant du texte, il est possible de ne créer l' | ||
- | </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 |
< | < | ||
- | 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, | + | MariaDB [(none)]> CREATE TABLE t5 ( id INT(11) NOT NULL AUTO_INCREMENT, |
Query OK, 0 rows affected (0.31 sec) | Query OK, 0 rows affected (0.31 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
La clause CONSTRAINT est optionnelle. Le nom de la contrainte doit être unique dans toute la base. Le nom de l' | La clause CONSTRAINT est optionnelle. Le nom de la contrainte doit être unique dans toute la base. Le nom de l' | ||
- | </note> | + | </WRAP> |
Lors d'une suppression ou d'une mise à jour, le comportement est dicté par l' | Lors d'une suppression ou d'une mise à jour, le comportement est dicté par l' | ||
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' | + | 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 |
- | <note important> | + | <WRAP center round important |
- | Dans le cas où une clef primaire n' | + | **Important** : |
- | </note> | + | Dans le cas où une clef primaire n' |
+ | </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' | + | 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' |
- | <note important> | + | <WRAP center round important |
+ | **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: | ||
< | < | ||
- | 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: | ||
</ | </ | ||
- | <note important> | + | <WRAP center round important |
- | 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> | ||
< | < | ||
- | mysql> CREATE TABLE t6( col1 VARCHAR(50), | + | MariaDB [(none)]> CREATE TABLE t6( col1 VARCHAR(50), |
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)]> |
</ | </ | ||
Ligne 593: | Ligne 596: | ||
< | < | ||
- | 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, | -> LEFT(description, | ||
-> MATCH(title, | -> MATCH(title, | ||
Ligne 617: | Ligne 620: | ||
5 rows in set (0.00 sec) | 5 rows in set (0.00 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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' | 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' | ||
- | </note> | + | </WRAP> |
==Mode Booléen== | ==Mode Booléen== | ||
Ligne 638: | Ligne 642: | ||
< | < | ||
- | mysql> SELECT film_id, | + | MariaDB [(none)]> SELECT film_id, |
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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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: | ||
< | < | ||
- | mysql> SELECT film_id, | + | MariaDB [(none)]> SELECT film_id, |
+---------+------------------------+----------------------------------------------------------------------------------------------------------------------+ | +---------+------------------------+----------------------------------------------------------------------------------------------------------------------+ | ||
| 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 |
- | | 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 |
- | | 812 | SMOKING BARBARELLA | + | | 812 | SMOKING BARBARELLA |
- | | 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 |
- | | 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 |
- | | 608 | MURDER ANTITRUST | + | | 608 | MURDER ANTITRUST |
- | | 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 |
- | | 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 |
- | | 242 | DOOM DANCING | + | | 242 | DOOM DANCING |
- | | 819 | SONG HEDWIG | + | | 819 | SONG HEDWIG |
- | | 15 | ALIEN CENTER | + | | 15 | ALIEN CENTER |
- | | 137 | CHARADE DUFFEL | + | | 137 | CHARADE DUFFEL |
- | | 844 | STEERS ARMAGEDDON | + | | 844 | STEERS ARMAGEDDON |
- | | 119 | CAPER MOTIONS | + | | 119 | CAPER MOTIONS |
- | | 907 | TRANSLATION SUMMER | + | | 907 | TRANSLATION SUMMER |
- | | 899 | TOWERS HURRICANE | + | | 899 | TOWERS HURRICANE |
- | | 918 | TWISTED PIRATES | + | | 918 | TWISTED PIRATES |
- | | 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 |
- | | 716 | REAP UNFAITHFUL | + | | 716 | REAP UNFAITHFUL |
- | | 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 |
- | | 809 | SLIPPER FIDELITY | + | | 809 | SLIPPER FIDELITY |
- | | 567 | MEET CHOCOLATE | + | | 567 | MEET CHOCOLATE |
- | | 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 |
- | | 261 | DUFFEL APOCALYPSE | + | | 261 | DUFFEL APOCALYPSE |
- | | 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 |
- | | 11 | ALAMO VIDEOTAPE | + | | 11 | ALAMO VIDEOTAPE |
- | | 201 | CYCLONE FAMILY | + | | 201 | CYCLONE FAMILY |
- | | 352 | GATHERING CALENDAR | + | | 352 | GATHERING CALENDAR |
- | | 398 | HANOVER GALAXY | + | | 398 | HANOVER GALAXY |
- | | 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 |
- | | 72 | BILL OTHERS | + | | 72 | BILL OTHERS |
- | | 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 |
- | | 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 |
- | | 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 |
- | | 974 | WILD APOLLO | + | | 974 | WILD APOLLO |
- | | 980 | WIZARD COLDBLOODED | + | | 980 | WIZARD COLDBLOODED |
- | | 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 |
- | | 987 | WORDS HUNTER | + | | 987 | WORDS HUNTER |
- | | 183 | CONVERSATION DOWNHILL | + | | 183 | CONVERSATION DOWNHILL |
- | | 804 | SLEEPING SUSPECTS | + | | 804 | SLEEPING SUSPECTS |
- | | 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 |
- | | 733 | RIVER OUTLAW | + | | 733 | RIVER OUTLAW |
- | | 303 | FANTASY TROOPERS | + | | 303 | FANTASY TROOPERS |
- | | 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 |
- | | 782 | SHAKESPEARE SADDLE | + | | 782 | SHAKESPEARE SADDLE |
- | | 114 | CAMELOT VACATION | + | | 114 | CAMELOT VACATION |
- | | 971 | WHALE BIKINI | + | | 971 | WHALE BIKINI |
- | | 822 | SOUP WISDOM | + | | 822 | SOUP WISDOM |
- | | 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 |
- | | 750 | RUN PACIFIC | + | | 750 | RUN PACIFIC |
+---------+------------------------+----------------------------------------------------------------------------------------------------------------------+ | +---------+------------------------+----------------------------------------------------------------------------------------------------------------------+ | ||
50 rows in set (0.01 sec) | 50 rows in set (0.01 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
< | < | ||
- | mysql> SELECT film_id, | + | MariaDB [(none)]> SELECT film_id, |
... | ... | ||
| 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)]> |
</ | </ | ||
Ligne 756: | Ligne 761: | ||
< | < | ||
- | mysql> SHOW VARIABLES LIKE ' | + | MariaDB [(none)]> SHOW VARIABLES LIKE ' |
+-----------------+-------+ | +-----------------+-------+ | ||
| Variable_name | | Variable_name | ||
Ligne 764: | Ligne 769: | ||
1 row in set (0.00 sec) | 1 row in set (0.00 sec) | ||
- | mysql> SHOW VARIABLES LIKE ' | + | MariaDB [(none)]> SHOW VARIABLES LIKE ' |
+-----------------+-------+ | +-----------------+-------+ | ||
| Variable_name | | Variable_name | ||
Ligne 772: | Ligne 777: | ||
1 row in set (0.00 sec) | 1 row in set (0.00 sec) | ||
- | mysql> SHOW VARIABLES LIKE ' | + | MariaDB [(none)]> SHOW VARIABLES LIKE ' |
Empty set (0.00 sec) | Empty set (0.00 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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' | 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' | ||
- | </note> | + | </WRAP> |
==Limitations== | ==Limitations== | ||
Ligne 796: | Ligne 802: | ||
< | < | ||
- | mysql> EXPLAIN SELECT film_id, | + | MariaDB [(none)]> EXPLAIN SELECT film_id, |
*************************** 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)]> |
</ | </ | ||
La sortie de la commande démontre 10 colonnes dont les plus importantes sont **type**, **possible_keys**, | La sortie de la commande démontre 10 colonnes dont les plus importantes sont **type**, **possible_keys**, | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Pour l' | Pour l' | ||
- | </note> | + | </WRAP> |
====La Colonne type==== | ====La Colonne type==== | ||
Ligne 828: | Ligne 835: | ||
< | < | ||
- | mysql> EXPLAIN SELECT * FROM film_text WHERE title LIKE ' | + | MariaDB [(none)]> EXPLAIN SELECT * FROM film_text WHERE title LIKE ' |
*************************** 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)]> |
</ | </ | ||
< | < | ||
- | mysql> SELECT * FROM film_text WHERE title LIKE ' | + | MariaDB [(none)]> SELECT * FROM film_text WHERE title LIKE ' |
*************************** 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)]> |
</ | </ | ||
Ligne 861: | Ligne 868: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
< | < | ||
- | mysql> SELECT category_id FROM category\G | + | MariaDB [(none)]> SELECT category_id FROM category\G |
*************************** 1. row *************************** | *************************** 1. row *************************** | ||
category_id: | category_id: | ||
Ligne 914: | Ligne 921: | ||
16 rows in set (0.00 sec) | 16 rows in set (0.00 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
Ligne 922: | Ligne 929: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 951: | Ligne 958: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
< | < | ||
- | 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: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
< | < | ||
- | 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: | rental_date: | ||
Ligne 1107: | Ligne 1114: | ||
32 rows in set (0.00 sec) | 32 rows in set (0.00 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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: | ||
< | < | ||
- | mysql> EXPLAIN SELECT email FROM customer INNER JOIN rental USING (customer_id) WHERE rental_date > ' | + | MariaDB [(none)]> EXPLAIN SELECT email FROM customer INNER JOIN rental USING (customer_id) WHERE rental_date > ' |
*************************** 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Ce type est le meilleur t(ype d' | Ce type est le meilleur t(ype d' | ||
- | </note> | + | </WRAP> |
===Cas Spécifiques=== | ===Cas Spécifiques=== | ||
Ligne 1158: | Ligne 1167: | ||
< | < | ||
- | 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: | category_id: | ||
Ligne 1179: | Ligne 1188: | ||
1 row in set (0.00 sec) | 1 row in set (0.00 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
Ligne 1191: | Ligne 1200: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 1232: | Ligne 1241: | ||
[root@centos ~]# mysql -uroot -p | [root@centos ~]# mysql -uroot -p | ||
Enter password: | Enter password: | ||
- | Welcome to the MySQL monitor. | + | Welcome to the MariaDB |
- | Your MySQL connection id is 8 | + | Your MariaDB |
- | Server version: 5.5.33-cll-lve | + | Server version: 5.5.33-cll-lve |
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 ' | Type ' | ||
- | 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: | ||
< | < | ||
- | 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, | + | MariaDB [(none)]> ALTER TABLE City ADD INDEX idx_name_district(Name, |
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 ' | + | MariaDB [(none)]> EXPLAIN SELECT * FROM City WHERE Name LIKE ' |
*************************** 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Notez que la taille de l' | Notez que la taille de l' | ||
- | </note> | + | </WRAP> |
====La Colonne rows==== | ====La Colonne rows==== | ||
Ligne 1293: | Ligne 1303: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
- | Dans l' | + | **Important** : |
- | </note> | + | Dans l' |
+ | </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 : | ||
< | < | ||
- | mysql> EXPLAIN SELECT * FROM City WHERE Name LIKE ' | + | MariaDB [(none)]> EXPLAIN SELECT * FROM City WHERE Name LIKE ' |
*************************** 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 ' | + | MariaDB [(none)]> SELECT COUNT(*) FROM City WHERE Name LIKE ' |
*************************** 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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, | + | La commande **EXPLAIN EXTENDED** est disponible dans MariaDB |
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 1394: | Ligne 1406: | ||
< | < | ||
- | mysql> EXPLAIN EXTENDED SELECT Name FROM City WHERE CountryCode LIKE ' | + | MariaDB [(none)]> EXPLAIN EXTENDED SELECT Name FROM City WHERE CountryCode LIKE ' |
*************************** 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 ' | + | MariaDB [(none)]> SELECT Name FROM City WHERE CountryCode LIKE ' |
*************************** 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)]> |
</ | </ | ||
Ligne 1420: | Ligne 1432: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 1452: | Ligne 1464: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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 |
- | 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 |
< | < | ||
- | mysql> EXPLAIN SELECT email FROM customer INNER JOIN rental ON customer.customer_id = rental.customer_id WHERE rental_date > ' | + | MariaDB [(none)]> EXPLAIN SELECT email FROM customer INNER JOIN rental ON customer.customer_id = rental.customer_id WHERE rental_date > ' |
*************************** 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
L' | L' | ||
- | </note> | + | </WRAP> |
Pourquoi l' | Pourquoi l' | ||
< | < | ||
- | mysql> EXPLAIN SELECT email FROM customer STRAIGHT_JOIN rental ON customer.customer_id = rental.customer_id WHERE rental_date > ' | + | MariaDB [(none)]> EXPLAIN SELECT email FROM customer STRAIGHT_JOIN rental ON customer.customer_id = rental.customer_id WHERE rental_date > ' |
*************************** 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)]> |
</ | </ | ||
Dans le cas ci-dessus, l' | Dans le cas ci-dessus, l' | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Pour les jointure externes, LEFT JOIN et RIGHT JOIN, l' | Pour les jointure externes, LEFT JOIN et RIGHT JOIN, l' | ||
- | </note> | + | </WRAP> |
====Indexes==== | ====Indexes==== | ||
Ligne 1572: | Ligne 1587: | ||
===USE INDEX=== | ===USE INDEX=== | ||
- | Il est possible d' | + | Il est possible d' |
< | < | ||
- | 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 > ' | + | 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 > ' |
*************************** 1. row *************************** | *************************** 1. row *************************** | ||
id: 1 | id: 1 | ||
Ligne 1601: | Ligne 1616: | ||
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Dans le cas d' | Dans le cas d' | ||
- | </note> | + | </WRAP> |
===FORCE INDEX=== | ===FORCE INDEX=== | ||
< | < | ||
- | 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 > ' | + | 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 > ' |
*************************** 1. row *************************** | *************************** 1. row *************************** | ||
id: 1 | id: 1 | ||
Ligne 1634: | Ligne 1650: | ||
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Dans le cas d' | Dans le cas d' | ||
- | </note> | + | </WRAP> |
===IGNORE INDEX=== | ===IGNORE INDEX=== | ||
< | < | ||
- | mysql> EXPLAIN SELECT email FROM customer INNER JOIN rental IGNORE INDEX (idx_fk_customer_id, | + | MariaDB [(none)]> EXPLAIN SELECT email FROM customer INNER JOIN rental IGNORE INDEX (idx_fk_customer_id, |
*************************** 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
- | Dans le cas d' | + | **Important** : |
- | </note> | + | Dans le cas d' |
+ | </WRAP> | ||
====CLAUSES LENTES==== | ====CLAUSES LENTES==== | ||
Ligne 1678: | Ligne 1696: | ||
< | < | ||
- | mysql> SHOW TABLE STATUS WHERE Name = ' | + | MariaDB [(none)]> SHOW TABLE STATUS WHERE Name = ' |
*************************** 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **Important** : | ||
Dans le cas ci-dessus la valeur de la colonne **type** est **NULL** indiquant qu' | Dans le cas ci-dessus la valeur de la colonne **type** est **NULL** indiquant qu' | ||
- | </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 |
< | < | ||
- | 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=' | + | MariaDB [(none)]> SELECT Language FROM CountryLanguage WHERE CountryCode = (SELECT Code FROM Country WHERE Name=' |
+------------+ | +------------+ | ||
| 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=' | + | MariaDB [(none)]> SELECT Language FROM CountryLanguage INNER JOIN Country ON Code=CountryCode WHERE Name=' |
+------------+ | +------------+ | ||
| Language | | Language | ||
Ligne 1757: | Ligne 1776: | ||
6 rows in set (0.01 sec) | 6 rows in set (0.01 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
Ligne 1767: | Ligne 1786: | ||
< | < | ||
- | mysql> SHOW GLOBAL VARIABLES LIKE ' | + | MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE ' |
+-----------------+---------+ | +-----------------+---------+ | ||
| Variable_name | | Variable_name | ||
Ligne 1775: | Ligne 1794: | ||
1 row in set (0.00 sec) | 1 row in set (0.00 sec) | ||
- | mysql> SHOW GLOBAL STATUS LIKE ' | + | MariaDB [(none)]> SHOW GLOBAL STATUS LIKE ' |
+------------------------+-------+ | +------------------------+-------+ | ||
| Variable_name | | Variable_name | ||
Ligne 1789: | Ligne 1808: | ||
7 rows in set (0.01 sec) | 7 rows in set (0.01 sec) | ||
- | mysql> | + | MariaDB [(none)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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' | 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' | ||
- | </note> | + | </WRAP> |
===InnoDB== | ===InnoDB== | ||
Ligne 1801: | Ligne 1821: | ||
^ Paramètre ^ Valeur Suggérée ^ | ^ Paramètre ^ Valeur Suggérée ^ | ||
- | | innodb_buffer_size | + | | innodb_buffer_pool_size |
| innodb_flush_log_at_trx_commit | 1 si la protection des données est primordiale, | | innodb_flush_log_at_trx_commit | 1 si la protection des données est primordiale, | ||
Ligne 1817: | Ligne 1837: | ||
- | <note important> | + | <WRAP center round important |
+ | **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: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 1895: | Ligne 1916: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
- | <note warning> | + | <WRAP center round important 60%> |
L' | L' | ||
- | </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: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 1979: | Ligne 2000: | ||
< | < | ||
- | 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** : | ||
< | < | ||
- | 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 | Records: 191939 | ||
- | 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)]> |
</ | </ | ||
Ligne 2013: | Ligne 2034: | ||
< | < | ||
- | mysql> SELECT SUM(montant), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| SUM(montant) | AVG(montant) | | | SUM(montant) | AVG(montant) | | ||
Ligne 2033: | Ligne 2054: | ||
< | < | ||
- | mysql> EXPLAIN PARTITIONS SELECT SUM(montant), | + | MariaDB [(none)]> EXPLAIN PARTITIONS SELECT SUM(montant), |
*************************** 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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 : | ||
< | < | ||
- | mysql> SELECT SUM(montant), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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)]> |
</ | </ | ||
Ligne 2080: | Ligne 2102: | ||
< | < | ||
- | mysql> SELECT SUM(montant), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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)]> |
</ | </ | ||
Ligne 2102: | Ligne 2124: | ||
< | < | ||
- | mysql> DELETE FROM transac_part WHERE jour BETWEEN ' | + | MariaDB [(none)]> DELETE FROM transac_part WHERE jour BETWEEN ' |
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)]> |
</ | </ | ||
===LAB #3 - Partitionnement par Listes=== | ===LAB #3 - Partitionnement par Listes=== | ||
Ligne 2124: | Ligne 2146: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 2136: | Ligne 2158: | ||
< | < | ||
- | 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: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 2167: | Ligne 2189: | ||
< | < | ||
- | mysql> SELECT SUM(montant), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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)]> |
</ | </ | ||
Ligne 2191: | Ligne 2213: | ||
< | < | ||
- | mysql> SELECT SUM(montant), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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)]> |
</ | </ | ||
Ligne 2218: | Ligne 2240: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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 : | ||
< | < | ||
- | mysql> SELECT SUM(montant), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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 : | ||
< | < | ||
- | mysql> EXPLAIN PARTITIONS SELECT SUM(montant), | + | MariaDB [(none)]> EXPLAIN PARTITIONS SELECT SUM(montant), |
*************************** 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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** : | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 2322: | Ligne 2347: | ||
< | < | ||
- | mysql> SELECT SUM(montant), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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)]> |
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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 | + | 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 |
Par exemple : | Par exemple : | ||
Ligne 2360: | Ligne 2386: | ||
</ | </ | ||
- | <note important> | + | <WRAP center round important |
+ | **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' | 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' | ||
- | </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 |
* 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: | ||
< | < | ||
- | 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; |
</ | </ | ||
Ligne 2412: | Ligne 2439: | ||
< | < | ||
- | mysql> SELECT SUM(montant), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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), | + | MariaDB [(none)]> SELECT SUM(montant), |
+--------------+--------------+ | +--------------+--------------+ | ||
| 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)]> |
</ | </ | ||
Ligne 2450: | Ligne 2477: | ||
< | < | ||
- | mysql> EXPLAIN PARTITIONS SELECT SUM(montant), | + | MariaDB [(none)]> EXPLAIN PARTITIONS SELECT SUM(montant), |
*************************** 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), | + | MariaDB [(none)]> EXPLAIN PARTITIONS SELECT SUM(montant), |
*************************** 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)]> |
</ | </ | ||
====LAB #6 - Partitionnement Vertical==== | ====LAB #6 - Partitionnement Vertical==== | ||
Ligne 2487: | Ligne 2514: | ||
< | < | ||
- | 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: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 2522: | Ligne 2549: | ||
< | < | ||
- | 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)]> |
</ | </ | ||
Ligne 2577: | Ligne 2604: | ||
< | < | ||
- | 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; |
</ | </ | ||