Générer un jeu de données : shell, mysqlslap, et procédure stockée

Tuesday 19 August 2008

Le prochain article de notre sĂ©rie consacrĂ©e aux index MySQL approche et j’ai besoin pour ce prochain Ă©pisode de gĂ©nĂ©rer une table de test de la forme suivante :

CREATE TABLE t (
id mediumint(8) unsigned NOT NULL auto_increment,
date timestamp(14) NOT NULL,
flag tinyint(4) NOT NULL default ‘0′,
PRIMARY KEY  (id),
KEY flag (flag)
) TYPE=MyISAM;


La structure est dĂ©finie, reste Ă  alimenter la table, disons 1 million d’enregistrements.

La valeur du champ “flag” est importante pour nos tests ultĂ©rieurs, sa valeur doit pour le moment ĂȘtre comprise entre 0 et 1, le tout Ă  peu prĂšs uniformĂ©ment distribuĂ©.

La requĂȘte sera la suivante :

INSERT INTO test.t (flag) VALUES (ROUND(RAND()));

Il faut maintenant exécuter celle-ci 1 million de fois.
Voyons ce que cela donne en utilisant le shell, mysqlslap ou bien encore une procédure stockée.

(more…)

Les index MySQL : types, placements, efficacité

Friday 27 June 2008

DĂ©jĂ  trois semaines d’Ă©coulĂ©es depuis que certains d’entre vous, les “hĂ©ros”, ont posĂ© leurs questions (oui il est possible de devenir un hĂ©ros rien qu’en lisant dbnewz ! Les vĂ©ritables hĂ©ros sont d’ailleurs abonnĂ©s au tout nouveau flux feedburner ;) )

Trois semaines d’attente, cela mĂ©rite un billet digne de ce nom, c’est parti.

Indexer, pourquoi ?

L’indexation peut avoir plusieurs buts :
- AccĂ©der Ă  ses donnĂ©es plus rapidement, les index sont en effet l’outil le plus puissant pour accĂ©lĂ©rer les temps d’exĂ©cution de vos requĂȘtes jusqu’Ă  parfois plusieurs centaines de % !
- DĂ©finir le degrĂ© d’unicitĂ© d’une colonne donnĂ©e : chaque champ doit-il ĂȘtre unique ? les doublons sont-ils autorisĂ©s ?

Principe de fonctionnement

Lorsque vous envoyez une requĂȘte Ă  votre serveur MySQL, celle-ci est d’abord confiĂ©e au “parseur” SQL qui a pour but de vĂ©rifier si la syntaxe de votre demande est correcte. Cette Ă©tape franchie, la requĂȘte passe par “l’optimiseur”. Il s’agit ici de dĂ©terminer le plan d’exĂ©cution de la requĂȘte afin que celle-ci s’exĂ©cute le plus rapidement possible.

L’optimiseur dĂ©tecte si d’Ă©ventuels index sont disponibles, si c’est le cas il dĂ©cidera de s’en servir… ou pas : il est parfois plus rapide de ne pas se servir d’un index ! Nous verrons pourquoi au cours de cette sĂ©rie d’articles.

Une fois le plan d’exĂ©cution achevĂ©, c’est le moteur de stockage qui prend le relais, celui-ci peut ĂȘtre vu comme un “module” de MySQL :

Les moteurs de stockage MySQL sont des \

(more…)

“Les index MySQL” : la sĂ©rie dont vous ĂȘtes le hĂ©ros

Thursday 5 June 2008

Un titre sans doute bien Ă©trange pour certains et qui rappelera des souvenirs Ă  d’autres, surtout Ă  ceux qui ont dĂ©jĂ  parcouru un de ces livres “dont vous ĂȘtes le hĂ©ros“…

Afin que les choses soient claires pour tout le monde, je vous propose en fait de participer Ă  la conception du sommaire de la future sĂ©rie d’articles sur les index qui sera publiĂ©e prochainement sur dbnewz.

L’indexation est en effet un thĂšme auquel il faut absolument s’intĂ©resser, tout d’abord pour Ă©viter des catastrophes et bien sĂ»r pour optimiser les performances !

(more…)

Choisir l’implĂ©mentation de ses index : “B-TREE” ou “HASH”, quelles diffĂ©rences ?

Monday 19 May 2008

PrĂ©ambule technique Ă  une sĂ©rie de futurs articles, je ne vous en dis pas plus, l’Ă©pisode du jour a pour point de dĂ©part un moteur de stockage MySQL avec Ă  la clĂ© la possibilitĂ©, ou pas, de dĂ©finir l’implĂ©mentation de ses index : B-TREE ou HASH.

Ce choix n’est en effet pas toujours disponible, c’est mĂȘme plutĂŽt rare puisque seul le moteur de stockage MEMORY vous permet depuis la version 4.1 de MySQL, d’effectuer ce choix. Nous ne parlerons pas ici du MySQL Cluster et de son moteur NDB qui sera abordĂ© spĂ©cifiquement dans un autre Ă©pisode.

Pourquoi alors se soucier de ce type d’implĂ©mentation si seul le moteur MEMORY offre la possibilitĂ© de choisir ?
- MyISAM et InnoDB pourraient Ă  l’avenir proposer ce choix.
- Afin de comprendre plus finement comment fonctionnent les index que vous utilisez tous les jours, se pencher sur la façon dont ils sont implémentés permet de mieux appréhender certains résultats.

(more…)