Jointure externe pour champ optionnel

Fermé
Cupidme Messages postés 1 Date d'inscription jeudi 25 avril 2019 Statut Membre Dernière intervention 25 avril 2019 - 25 avril 2019 à 09:40
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 25 avril 2019 à 12:21
Bonjour,

Je travaille actuellement sur la refonte d'une bdd mysql.
Cette bdd est en faite une énorme table de 200 champs, plusieurs millions de lignes, quasiment aucun index... Bref, des performances calamiteuse et une conso de ram dantesque !
Je suis parvenu dans un premier temps à réduire le nombre de champ en mettant en place des relations 1:n.
Je me pose une question sur un point précis :
Un certain nombre de champs sur cette base sont optionnels et peu souvent renseignés. (parfois quasi jamais)
Quelle est la meilleure chose à faire dans ce cas :
- laisser le champ dans la table quitte à ce qu'il soit très souvent de valeur null
- mettre en place des relation n:n sachant que ces relations, si elles existent, ne renverront qu'une seule ligne
- ...ou une autre solution à laquelle je n'ai pas pensé

Par avance merci de vos conseils avisés ;)
Dimitri



Configuration: Windows / Chrome 73.0.3683.103

2 réponses

jee pee Messages postés 40559 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 17 décembre 2024 9 459
25 avril 2019 à 10:01
Bonjour,

Pour moi c'est plus l'utilisation qui devrait primer.

Si dans 80% des cas les commandes sql exécutées ces champs interviennent, autant les laisser dans la table pour ne pas avoir à effectuer de jointure.

Si dans 80% des cas ces champs ne figurent pas dans les commandes sql exécutées, tu pourrais les déplacer dans une autre table. En réfléchissant en terme de MCD.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 avril 2019 à 10:06
Bonjour,

Ça dépend si ces champs ont souvent besoin d'être lus ou non.
Si tu veux, pour des raisons de lisibilité humaine, réduire le nombre de champs dans la table principale, tu peux créer une deuxième table en relation 1:1 qui reprendra ces colonnes-là. Les requêtes seront un poil plus lente puisqu'une jointure supplémentaire sera nécessaire, mais si ces champs n'ont pas souvent besoin d'être lus ça allègera les requêtes qui n'en ont pas besoin.

Mais bon, en soi, laisser les champs à NULL ne pose pas vraiment de problème d'un point de vue purement technique.

Xavier
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 avril 2019 à 12:21
(Oui voilà, comme a dit jee pee qui m'a devancé)
0