21.1 Comparer MySQL et mSQL

Cette section a été écrite par des développeurs MySQL, et il doit être lu avec quelques reserves. Cependant, il n'y a AUCUNE erreur factuelle, autant que nous le sachions.

Pour une liste complète de toutes les limites, fonctions et types, allez à crash-me (en anglais).

Performance
Pour une comparaison de performances valide, consultez la suite de tests. 11 La suite de tests de MySQL. Parce qu'il n'y a pas de création de thread général, que l'analyseur syntaxique est compact, les fonctionnalités peu nombreusese, et la sécurité simple, mSQL est plus rapide dans les tches suivantes :
  • Tests qui effectuent des connexions/deconnexion repetées, avec une requête tres simple entre les deux.
  • Opérations INSERT dans des tables simples, avec quelques colonnes et clés.
  • CREATE TABLE et DROP TABLE.
  • SELECT sur ce qui n'est pas un index. (l'analyse d'une table est très simple).
Etant donné que ces opéartions sont simples, il est très difficile de les surpasser dès qu'on a une partie administrative plus importante. Apres l'établissement de la connexion, MySQL devrait être plus rapide. D'un autre coté, MySQL est beaucoup plus rapide que mSQL (et que la plus part des implémentation SQL) dans les cas suivants :
  • Opérations SELECT complexes.
  • Récupération de résultat très importants (MySQL a un protocol pluls rapide, plus sur et bien meilleur).
  • Tables à longueur d'enregistrement variable, étant donné que MySQL les gère mieux, et qu'il autorise les index sur les colonnes VARCHAR.
  • Gestion des tables ayant beaucoup de colonnes.
  • Gestion des tables ayant des lignes de très grande taille.
  • SELECT avec de nombreuses expressions.
  • SELECT sur les grandes tables.
  • Gestion de plusieurs connexions simultanées. MySQL est complétement multi-threaded. Chaque connexion a son propre thread, ce qui fait que les threads ne s'attendent pas les uns les autres (sauf lorsque des LOCK sont posés sur les tables). Avec mSQL, une fois la connexion établie, les autres doivent attendre que le premier ait terminé, quelque soit la requête lancée. Lorsque cette dernière est terminée, la connexion se termine, et la prochaine connexion est ouverte.
  • Jointures. mSQL peut devenir desespérement lent si vous changez l'ordre des tables dans la commande SELECT. Dans la suite de teste, il est arrivé que mSQL soit 15000 fois plus lent que MySQL Cela est du à mSQL à qui manque un optimisateur de jointures. Cependant, si vous placez les tables dans le bon ordre, si la clause WHERE est simple et si elle utilise des colonnes indexées, la jointure sera plutôt rapide. 11 La suite de tests de MySQL.
  • ORDER BY et GROUP BY.
  • DISTINCT.
  • Utiliser des colonnes de type TEXT ou BLOB.
SQL
  • GROUP BY and HAVING. mSQL ne supporte pas la clause GROUP BY. MySQL supporte complètement la clause GROUP BY avec la clause HAVING et les instructions suivantes : COUNT(), AVG(), MIN(), MAX(), SUM() and STD(). COUNT(*) est optimisé pour retourner TRES rapidement le bon compte si SELECT ne fait que compter dans une seule table, sans colonne supplémentaire, ni clause WHERE. MIN() et MAX() acceptent aussi des arguments chaînes.
  • INSERT et UPDATE avec calculs. MySQL peut faire des calculs dans une commande INSERT et UPDATE. Par exemple :
    mysql> UPDATE SET x=x*10+y WHERE x<20;
    
  • Alias. MySQL permet les alias de colonnes.
  • Qualification minimale des noms de colonnes. Avec MySQL, si un nom de colonne est unique parmi les tables en jeu dans une requête, il n'est pas nécessaire de l'identifier avec son nom complet.
  • SELECT avec des fonctions. MySQL dispose de nombreuses fonctions (trop nombreuses pour être listées ici : allez à 7.3 Fonctions utilisées dans les clauses SELECT et WHERE).
Utilisation du disque
A quel point pouvez vous réduire vos tables? MySQL dispose de types de colonnes précis, qui vous permettent de créer des tables qui prenent le moins de place possible. Comme exemple de type de table bien pratique, nous pouvons prendre MEDIUMINT qui ne prend que 3 octets. Si vous avez 100,000,000 enregistrements, économiser 25% de la place peut être primordial. mSQL2 dispose de beaucoup moins de types de colonnes, et cela rend difficile la réduction de tables.
Stabilité
Cela est plus difficile à estimer objectivement. Pour la stabilité, voyez 1.5 Est ce que MySQL est stable?. Nous n'avons aucune experience en terme de stabilité mSQL, et nous ne nous étendrons pas sur ce point.
Prix
Un autre élément d'importance est la licence. MySQL a une licence plus souple que mSQL, et il est aussi moins cher que mSQL. Quelque soit le produit que vous décidez de choisir, pensez à prendre une licence ou un support email. (Il vous faut aquérir une licence pour inclure MySQL dans un produit que vous vendez).
Interfaces Perl
MySQL a pratiquement les mêmes interfaces avec Perl que mSQL mais avec quelques fonctionnalités en plus.
JDBC (Java)
MySQL dispose actuellement de 4 pilotes JDBC :
  • Le pilote gwe : une interface Java par GWE technologies (plus du tout supportée).
  • Le pilote jms : un pilote gwe amélioré par Xiaokun Kelvin ZHU
  • Le pilote twz : Un pilote de type 4 JDBC par Terrence W. Zellers
  • Le pilote mm : Un pilote de type 4 JDBC par Mark Matthews
Les pilotes recommendés sont twz et mm. Les deux fonctionnent parfaitement. Nous savons que mSQL dispose d'un pilote JDBC, mais nous n'avons que très peu d'expérience, et ne pouvons pas comparer.
Vitesse de developpement
MySQL dispose d'une petite équipe de développeur, mais nous sommes habitués à travailler en C et C++ très rapidement. Etant donné que les threads, fonctions, GROUP BY etc... ne sont pas implémentés dans mSQL, il a pas mal de retard. Pour dire les choses simplement, il suffit de comparer le fichier d'historique de mSQL et de le comparer à la section news de MySQL Reference Manual ( D Historique des versions de MySQL). Le logiciel le plus rapidement developpé est une évidence.
Programmes utilitaires.
mSQL et MySQL dispose d'outils partenaires très interssants. Etant donné qu'il n'est pas facile de porter ces outils de MySQL à mSQL), la plus part des applications interssantes, disponibles pour mSQL sont aussi disponibles pour MySQL. MySQL est livré avec un utilitaire tout simple, msql2mysql qui corrige les problèmes d'orthographe dans les API C entre mSQL et MySQL Par exemple, il va remplacer les appels à msqlConnect() par mysql_connect(). Convertir un programme client de mSQL à MySQL ne prend que quelques minutes.
Sommaire: