1.8 Les évolutions de MySQL (la liste des tâches)
1 Informations générales
Manuel de Référence MySQL 4.1 : Version Française
. Ce que devrait inclure la version 4.0 . Ce qui est prévu pour la version 4.1 ->Ce qui doit être fait dans un futur proche . Ce qui est prévu pour plus tard . Ce qui n'est pas prévu
|
1.8.3 Ce qui doit être fait dans un futur proche
-
Limiter le nombre de threads qui travaillent à la restauration d'une table
MyISAM en même temps.
-
Changer le code de la commande
INSERT ... SELECT
pour supporter les
insertions concurrentes, en option.
-
Retourner le type original des champs avec la commande
SELECT MIN(column)
... GROUP BY
.
-
Support des résultats multiples.
-
Rendre possible la spécification de
long_query_time
avec une
granularité en microsecondes.
-
Lier le code de
myisampack
dans le serveur.
-
Porter le code de MySQL sur QNX.
-
Porter le code de MySQL sur BeOS.
-
Porter le code du client MySQL sur LynxOS.
-
Ajouter un buffer de clés temporaires durant les commandes
INSERT/DELETE/UPDATE
de manière a le restaurer proprement si le fichier d'index se remplit.
-
Si vous exécutez une commande
ALTER TABLE
sur une table qui est
liée symboliquement sur un autre disque, les tables temporaires devraient
être créées dans ce disque.
-
Implémenter un type
DATE/DATETIME
qui gère les données de fuseaux
horaires correctement, afin de simplifier la gestion de ces derniers.
-
FreeBSD et MIT-pthreads; est-ce que les threads en veille consomment du temps
processeur ?
-
Vérifier si les threads verrouillés consomment du temps processeur.
-
Corriger le script de configure pour que l'on puisse compiler toutes les
librairies (comme
MyISAM
) sans les threads.
-
Ajouter une option pour vider périodiquement les pages de clés,
avec des clés retardées si on ne les a pas utilisées depuis un bon moment.
-
Permettre les jointures sur des parties de clés (problème d'optimisation).
-
INSERT SQL_CONCURRENT
et
mysqld --concurrent-insert
pourraient
réaliser des insertions concurrentes à la fin du fichier, si le fichier est
verrouillé en lecture.
-
Les curseurs coté serveur.
-
Vérifier si
lockd
fonctionne avec les noyaux moderne. Si ce n'est pas le
cas, nous devons corriger
lockd
! Pour tester cela, démarrez
mysqld
avec l'option
--enable-locking
et lancez différents tests de fork*. Si
cela fonctionne, il ne doit y avoir aucune erreur.
-
Permettre des variables SQL dans la clause
LIMIT
, comme
LIMIT @a,@b
.
-
Permettre les modifications de variables dans les commandes
UPDATE
. Par exemple :
UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c
.
-
Changer les modifications de variables utilisateur pour que l'on puisse les utiliser
avec la clause
GROUP BY
, comme ceci :
SELECT id, @a:=COUNT(*), SUM(sum_col)/@a FROM nom_de_table GROUP BY id
.
-
Ne pas utiliser de valeur par défaut
DEFAULT
automatiquement.
Générer une erreur lorsque la commande
INSERT
ne contient pas
la valeur d'une colonne qui n'a pas de valeur par
DEFAULT
.
-
Corriger
libmysql.c
pour permettre les commandes
mysql_query()
dans une ligne sans lire les résultats, ou afficher une erreur lorsque
l'on tente de le faire.
-
Vérifier pourquoi MIT-pthreads
ctime()
ne fonctionne pas sur
certains systèmes FreeBSD.
-
Ajouter une option
IMAGE
à la commande
LOAD DATA INFILE
pour ne
pas modifier les colonnes de type
TIMESTAMP
et
AUTO_INCREMENT
.
-
Ajouter la syntaxe
LOAD DATE INFILE ... UPDATE
.
-
Pour les tables avec clés primaires, si les données ne contiennent pas
de clé primaire, les entrées qui correspondent à cette clé primaire
sont modifiées avec le reste des colonnes. Cependant, les colonnes
qui
manquent
dans les données entrantes sont ignorées.
-
Pour les tables avec des clés primaires à qui il manque une partie
de la clé dans les données entrantes, ou si il n'y a pas la clé
primaire, les données sont traitées comme pour
LOAD DATA INFILE ... REPLACE INTO
.
-
Faire que la commande
LOAD DATA INFILE
comprenne ceci :
LOAD DATA INFILE 'file_name.txt' INTO TABLE tbl_name TEXT_FIELDS (text_field1, text_field2, text_field3) SET table_field1=CONCAT(text_field1, text_field2), table_field3=23 IGNORE text_field3
|
Ceci peut être utilisé pour sauter les colonnes de texte
supplémentaire dans le fichier, ou pour modifier des colonnes
en se basant sur les données lues.
-
LOAD DATA INFILE 'file_name' INTO TABLE 'nom_de_table' ERRORS TO err_nom_de_table
.
Cette commande enregistrera les erreurs et les alertes dans la table
err_nom_de_table
. Cette table aura la structure suivante :
line_number - numéro de ligne dans le fichier de données error_message - Le message d'erreur ou d'alerte Ou peut être data_line - La ligne du fichier de données
|
-
Affichage automatique de
mysql
vers Netscape.
-
LOCK DATABASES
(avec différentes options).
-
Fonctions :
ADD_TO_SET(value,set) et REMOVE_FROM_SET(value,set).
-
Ajouter les syntaxes
t1 JOIN t2 ON ...
et
t1 JOIN t2 USING ...
Actuellement, vous ne pouvez utiliser cette syntaxe qu'avec
LEFT JOIN
.
-
Bien plus de valeurs dans la commande
show status
. Les lignes
lues et modifiées. Les sélections sur une table et les jointures.
Le nombre moyen de table dans une sélection. Le nombre de
clause
ORDER BY
et
GROUP BY
dans les requêtes.
-
Si vous interrompez
mysql
au beau milieu d'une requête, vous
devriez ouvrir une autre connexion, et tuer l'ancienne requête.
Alternativement, une tentative de détection doit avoir lieu sur le
serveur.
-
Ajouter un gestionnaire d'interface pour les informations de tables, de manière
à pouvoir l'utiliser comme une table système. Cela serait un peu lent si vous
demandez toutes les informations sur toutes les tables, mais c'est très souple.
SHOW INFO FROM tbl_name
pour les informations simples de tables
devrait être implémenté.
-
NATURAL JOIN
.
-
Permettre la commande
SELECT a FROM crash_me LEFT JOIN crash_me2 USING (a)
;
dans ce cas,
a
est supposé provenir de la table
crash_me
.
-
Corriger le code pour que
ON
et
USING
fonctionne avec les jointures
de type
JOIN
.
-
Commande Oracle
CONNECT BY PRIOR ...
pour rechercher les hiérarchies.
-
mysqladmin copy database new-database
; requiert la commande
COPY
dans
mysqld
.
-
La liste des processus devrait afficher le nombre de
requêtes et de threads.
-
SHOW HOSTS
doit afficher les informations sur les noms d'hôte en cache.
-
Options de
DELETE
et
REPLACE
dans la commande
UPDATE
(cela effacerait des lignes lorsque une clé voit un doublon surgir durant
la mise à jour).
-
Modifier le format de
DATETIME
pour stocker les fractions de secondes.
-
Ajout de tous les types de données qui manquent de ANSI92 et ODBC 3.0.
-
Changer les noms des tables de chaîne vide en
NULL
pour les
colonnes calculées.
-
Ne pas utiliser
Item_copy_string
sur les valeurs numériques pour
éviter la conversion nombre -> chaîne -> nombre dans le cas de :
SELECT COUNT(*)*(id+0) FROM nom_de_table GROUP BY id
-
Rendre possible l'utilisation de la nouvelle librairie d'expression
régulière GNU en lieu et place de celle qui a actuellement cours
(la librairie GNU devrait être bien plus rapide).
-
Modifier la commande
ALTER TABLE
pour qu'elle n'interrompe
pas les clients qui exécutent des commandes
INSERT DELAYED
.
-
Corriger le code pour que lorsque les colonnes sont référencées dans
une commande
UPDATE
, elle contiennent les anciennes valeurs, et non
pas les nouvelles.
-
Ajouter la simulation de
pread()
/
pwrite()
sous Windows
pour permettre les insertions concurrentes.
-
Un analyseur de fichiers de log, qui pourrait traiter les données et indiquer
quelles tables sont les plus souvent utilisées, combien de jointures sont
faites, etc. Cela aidera les utilisateurs à identifier les points
sensibles dans leur conception de bases de données.
-
Ajouter
SUM(DISTINCT)
.
-
Ajouter les fonctions de groupement
ANY()
,
EVERY()
et
SOME()
.
En ANSI SQL, elles ne fonctionnent que sur les colonnes de type booléen,
mais nous pouvons les étendre pour qu'elles fonctionnent sur n'importe quelle
type de colonne ou d'expression en appliquant la conversion
valeur == 0 -> FALSE et valeur <> 0 -> TRUE.
-
Faire que le type de
MAX(column)
soit le même que le type de la colonne
utilisé. Par exemple :
mysql> CREATE TABLE t1 (a DATE); mysql> INSERT INTO t1 VALUES (NOW()); mysql> CREATE TABLE t2 SELECT MAX(a) FROM t1; mysql> SHOW COLUMNS FROM t2;
|
-
Inventer une syntaxe pratique pour une commande qui va modifier avec
UPDATE
une ligne si elle existe, et sinon, faire un insertion
INSERT
si cette ligne n'existe pas.
(Comme
REPLACE
le fait avec
INSERT
/
DELETE
).
|