News MYSQL

le 02/07/2008 à 21:00
Les tables de décisions en MySQL
Les tables de décisions rassemblent la logique métier dans un tableau, simple à lire et à comprendre. "Les tables de décisions, pour moi [Jonathan], prennent tout leur sens dans le fait que leur logique métier est aisée à comprendre, et peut être facilement vérifiée."

Jonathan suit alors son idée de stocker de telles tables en base de données, avec la possibilité de les traduire en code (PHP ou autre) facilement. Cela redonne la main aux utilisateurs pour établir leurs processus de fonctionnement. L'article ne va pas aussi loin, mais c'est déjà un bon début.

- Decisions in Your Tables
le 30/06/2008 à 23:13
Trouver les index MySQL inutiles
Arjen Lentz propose la requête suivante pour détecter les index qui ne servent à rien dans MySQL :

SELECT s.table_name, concat(s.index_name,'(',group_concat(s.column_name order by s.seq_in_index),')') as idx, GROUP_CONCAT(s.cardinality ORDER BY s.seq_in_index) AS card, t.table_rows FROM information_schema.tables t JOIN information_schema.statistics s USING (table_schema,table_name) WHERE t.table_schema='dbname' AND t.table_rows > 1000 AND s.non_unique GROUP BY s.table_name,s.index_name HAVING (card + 0) < (t.table_rows / 3);

La requête utilise la base information_schema (MySQL 5.0 et supérieur), pour repérer les index dont la cardinalité est inférieure à 30% : c'est le niveau à partir duquel MySQL va décider que l'index est utile, et en dessous de ce niveau, MySQL décidera d'ignorer l'index et de tout analyser. Cela revient à décider de tout ranger quand le désordre est tellement grand que corriger les erreurs sera beaucoup plus long encore.

- Arjen's Journal - Finding useless indexes
Note de l'auteur :

"Lorsque vous utilisez MySQL en mode batch, vous aurez souvent besoin d'utiliser les commandes en ligne UNIX en collaboration avec des requêtes SQL. Ce script de démonstration vous montre comment faire cela."

Amit K. Saha présente ici un truc pratique pour tout faire dans un script Shell, sans passer par un langage de programmation complémentaire.

- Mixing SQL and shell commands in MySQL
le 28/06/2008 à 20:35
Nouvelle version de MySQL : 6.0.5
MySQL 6.0.5, avec la dernière version de Falcon, est disponible au téléchargement. MySQL 6.0 inclut essentiellement le nouveau moteur Falcon, développé pour MySQL par Jim Starkey.

MySQL 6.0.4 apporte 2 correctifs de sécurité, portant sur les tables MyISAM et la version Microsoft. Un total de 400 bugs ont été corrigés dans cette nouvelle version.

Changements incompatibles :
- Les tables de logs sont maintenant de type FILE, et non plus TABLE.
- La bibliothèque de conversion chaîne nombre a été changée
- MySQL Cluster doit être téléchargé séparément
- NDB_LE_MemoryUsage.page_size_kb est renommé page_size_bytes
- Une colonne ROUTINE_TYPE a été ajouté dans information_schema.PARAMETER

Corrections :
- Sécurité : Correction liées aux tables MyISAM et aux options DATA DIRECTORY et INDEX DIRECTORY.
- Correction sur les versions Microsoft Windows Vista et Server 2008.
- Correction des AUTO_INCREMENT du NDBCorrection d'un bug de réplication lors des crash sur UPDATE
- Il n'est plus possible de créer de fichiers de plus de 4 Go sur les systèmes 32 bits
- FRAC_SECOND n'est plus un synonyme de MICROSECOND
- InnoDB affiche l'espace libre dans son status.
- Changement de traitement pour les espaces finaux Correction du déclenchement de TRIGGER AFTER UPDATE
- Amélioration de la gestion du réseau par la réplication

- MySQL 6.0 home page
- Téléchargement mysql 6.0.5
- News MySQL 6.0.5
- Falcon Evaluation Guide
- Falcon White Paper
le 27/06/2008 à 22:34
Tout sur les index
Les index n'ont plus de secret pour dbnewz, et il n'en n'auront plus pour vous non plus quand vous aurez lu ce long dossier. En plus du classique EXPLAIN qui explique l'utilisation des index par les requêtes, vous pourrez découvrir PROCEDURE ANALYSE(), qui optimise le type de données pour votre table.

Index simples, index multiple, choix des index : tout y passe. Il ne reste que la structure des index et leurs performances, à voir dans les prochains articles.

- Les index MySQL : types, placements, efficacité
le 25/06/2008 à 22:36
Appeler du code Java depuis MySQL
Note de l'auteur :

Cette dépêche est la suite de ma session à JavaDeus 2008, où j'ai montré comment utiliser Lucene à l'intérieur de MySQL, en utilisant une branche expérimentale, quelques procédures stockées et déclencheurs.

Comme le processus n'est pas entièrement évident, et que cette branche est très expérimentale, j'ai pensé qu'il serait utile de détailler tout cela en ligne. Il est vraiment surprenant de voir comment peu de code (en Java, en tous cas) peut vous donner un moteur de recherche en texte intégral complet et souple.

Où il est question de faire une procédure stockée en Java. Beaucoup de compilation, et au final, l'utilisation directe de Java en MySQL.

- Calling Java Code from MySQL
- Lucene
- sakila-server
Le client en ligne de commande MySQL dispose d'un système pour appeler des scripts externes avant d'afficher les résultats. On peut donc automatiser des mises en forme personnalisées, ou simplement noter des informations tout en traitant des données.

Le plus simple est encore le pager less, qui évite les défilements infinis de données. 

Baron Schwartz montre aussi comment calculer la durée d'attente d'un verrou ou bien comment l'utiliser avec Maatkit pour faire un affichage en arbre. Très pratique, vraiment.

- Neat tricks for the MySQL command-line pager
- Maatkit home page
Note de l'auteur :

Disposer d'un MCD (modèle conceptuel de données) lorsqu'on travaille sur une requête SQL impliquant différentes tables représente un gain de temps.

Il est en effet plus rapide de jeter un coup d'oeil sur un MCD afin de repérer quels sont les champs qui lient une table à une autre plutôt que d'enchainer les DESC ma_table, puis repérer la clé primaire et les éventuelles clés étrangères, et rebolote sur la ou les tables de destination

La prochaine série d'articles sur les index MySQL va nous amener à enchainer quelques requêtes sur une des deux bases d'exemple disponibles sur le site de MySQL : world et sakila, le prétexte est donc tout trouvé pour évoquer ici la solution que j'ai retenu pour obtenir le MCD de ces tables : DBDesigner 4.

Cet outil n'est pas nouveau, son successeur officiel est même déjà connu, il s'agit de MySQL Workbench. Celui-ci n'étant pas encore disponible sous linux, nous utiliserons son ancêtre et plus particulièrement sa fonctionnalité de reverse engineering : une fois connecté à votre base, DBDesigner 4 va générer sous forme graphique vos tables, leurs descriptions, et si tout se passe bien, les relations entre vos tables.

- DBDesigner 4 : générer son MCD par reverse engineering
- sakila
- MySQL workbench
- DBdesigner 4
le 20/06/2008 à 21:37
L'art de la jointure : join-FU
L'inénarrable Jay Pipes publie ses conférences sur le Join-Fu, l'art de maîtriser les jointures. Les deux conférences, données en Avril dernier à MySQL UC, sont toutes les deux très complètes, et pratiques. Jay suggère ne plus raisonner en boucle mais en ensembles, de réaliser des partitions verticales. C'est très long, mais vous y apprendrez sûrement comment améliorer vos requêtes SQL.

- Slides for Join-Fu: The Art of SQL (I and II)
le 18/06/2008 à 23:48
Présentation de Falcon
MySQL/Sun a publié un nouveau moteur de table MySQL baptisé "Falcon" en janvier 2007. Falcon est un moteur transactionnel à hautes performances (entièrement compatible ACID) : le moteur est en béta actuellement. Dans cet article, je vais décrire les fonctionnalités de Falcon et son architecture.

Falcon a été initialement créé par Jim Starkey, inventeur de MVCC, des BLOB, d'Interbase, contributeur majeur à Firebird, avec sa femme Ann Harrison. Jim ne fait plus partie de MySQL AB depuis juin, mais l'équipe de travail autour de Falcon reste en place.

Falcon est présente des améliorations très prometteuses par rapport à MyISAM, et même InnoDB : très peu de configuration, support des transactions, hautes performances pour les écritures, lectures simultanées.

- Falcon storage engine in depth
- Download MySQL 6.0
LoadingChargement en cours