Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: petit bouchon le le 25-07-2003 a 10:21:36

Titre: Nombre de champs dans une base de données
Posté par: petit bouchon le le 25-07-2003 a 10:21:36

[color=Pink]Bonjour à tous,

J'ai créé une base de données mais le problème c'est quelle comporte beaucoup de champs. Est-ce un problème? En fait elle en comporte 74 dont 10 de photo. Est-ce que le serveur risque de trouver ça top lourds ? Parce qu'en fait au début j'ai essayé de le faire en plusieurs tables mais les infos sont toujours différentes et donc ça ne servait pas à grand chose.
Pour information c'est une base de données pour des villas à louer et c'est en faite la description des villas qui compose a base de données.

Merci par avance.

Petit bouchon[/color]

Titre: Re:Nombre de champs dans une base de données
Posté par: POde.uk le le 25-07-2003 a 13:36:37

:o

ya peut etre moyen d'optimiser quand même?

par exemple tu as toujours 10photos?
tu peux les nommer toutes selon un certain shéma, par exemple tu as un nom de base pour la série, et tu rajoutes 1 2 3 4 .... au nom pour les différencier, tu peux déjà faire une économie de 9 champs
sinon tu peux créer un répertoire spécial pour chaque villa, qui contient les photos, et tu fais un script qui parcours ce répertoire et affiche les photos tant qu'il y en a.
sinon comment tu fais pour avoir 74 champs? c'est chaque fois la description ?

je suis sûr que tu peux ramener ce nombre à un maximum de 10/12, en ne mettant que les informations importantes dans un champs séparé (nombre de lits, tarifs en fonction de la saison, lieu, piscine ou pas, etc) et mettre une description dans un champs text?

sinon je ne sais pas si les effets s'en ressentent, essaie de chronomêtrer le temps d'execution de la page? tu récupères l'heure en début du script (le nombre de battement depuis 1970) et pareil à la fin du script, tu soustrais et tu convertis en milli secondes, et tu regardes si ça te semble important ou pas

je ne connais pas le fonctionnement interne de mysql, donc si un spécialiste passe par là il pourra peut etre te répondre:)


edit : je viens de voir que c'est ton premier msg, bienvenue sur forum webmaster (jtai grillé shain :p)

Titre: Re:Nombre de champs dans une base de données
Posté par: erwinol le le 25-07-2003 a 16:19:45

Alors voici mes petits conseils d'optimisation des tables :

- Pour les photos Pode a déjà très bien expliqué, je te conseille de suivre ce qu'il dit. Tu trouves une logique dans le choix des noms de photos. Ensuite tu mets soit un champ avec le nombre de photos associée à l'enregistrement oubien tu peux utiliser un répertoire et tu parcourt ce répertoire ... enfin POde a suffisamment expliqué :)

- Mettre les champs obligatoires dans une table et les champs optionnels dans une autre, ça évite de gaspiller de la place. Car si tu mets tout dans une seule et même table tous les champs vides prendront de la place. Si il n'y a que les champs obligatoires qui sont remplis tu gagnera énormément de place. Tu peux même faire 3 tables, la première avec les champs obligatoires, une 2ème avec les champs optionnel qui sont souvent remplis et la dernière avec des champs restant souvent vides.

- Mettre les champs de taille fixe à part augmentera les performances. Quand dans une même table tu as des champs de taille fixe et des champs de taille variables selon l'enregistrement tu perds au niveau des performances.

Titre: Re:Nombre de champs dans une base de données
Posté par: petit bouchon le le 25-07-2003 a 21:38:32

[color=Pink]Pour répondre à Pode en fait j'ai autant de champs car en fait je reprends le site de quelqun qui ne veut pas que je change la charte graphique et j'ai donc des contraintes au niveaux de l'emplacement des données de description. Je voudrais que les pages de description s'affiche dynamiquement pour que la mise à jour soit plus simple pour le client et c'est pour cela que je voulais creer une base de données. Pour illustrer ce que je viens de dire tu peux regarder cette page : http://www.corsevilla.com/desc_villa107.htm
Sinon pour les photos je n'y avais pas pensé je te remercie je vais essayer de faire ça. Le problème c'est que je débute alors je n'ai pas toujours les idées qu'il faut.

Maintenant pour répondre à erwinol en faite la dernière fois j'ai eu des problèmes avec mes différentes tables parce que j'avais utilisé un système d'auto increment pour les clés et quand je spprimais une fois un enregistrement dans une table ce n'était pas pris en compte dans les autres et donc mes ID ne correspondaient plus...

Voilà je voulais aussi vous remercier pour votre aide.[/color]

Titre: Re:Nombre de champs dans une base de données
Posté par: POde.uk le le 26-07-2003 a 03:03:08

oui en effet tu as beaucoup de champs

mais comme le dit justement erwinol, afin que les requetes soient les plus rapides possibles, il faut que le format des champs soit bien optimisé, et avec des tailles fixes si possible
si c'est bien respecté j'ignore si le fait d'avoir moins de champs mais de taille plus importante modifierai beaucoup la vitesse d'éxecution, surtout si le site ne comptabilise trop de requêtes pas jour (mais je ocnnais pas la fréquentation de corsevillaà

Titre: Re:Nombre de champs dans une base de données
Posté par: OlivierB le le 27-07-2003 a 22:57:48

alors, bon déjà 70 champs c'est vrai que c'est beaucoup, mais à part augmenter la taille des données dans tes scripts php si tu fais un SELECT * FROM table ça n'influincera rien d'autre. La vitesse sera la meme que si tu n'avais qu'un seul champ

ce qui prend le plus de temps c'est d'atteindre le premier octet de la ligne d'une table, pour ça quand tu a beaucoup d'enregistrements, il faut utiliser un index. Ensuite, une fois que mysql a trouvé l'enregistrement il accède à n'importe quel champ quasi à la meme vitesse (ca dépend de la vitesse du disque dur mais avec des disques récents, c'est instantanné)

Titre: Re:Nombre de champs dans une base de données
Posté par: OlivierB le le 27-07-2003 a 23:04:31

autre chose, pas besoin de séparer tes données en plusieurs tables (pour un meme objet -> exemple "un membre") sauf si tu peut rendre ta table statique et séparer le contenu dynamique dans une autre table

une table dynamique est une table ayant au moins un champ de type "variable" tel que TEXT ou VARCHAR. Une table dynamique se fragmente rapidement car les données effacées dans un champs sont gardées en mémoire et prennent donc de la place inutilement. Il faut donc régulièrement libérer cette place avec un OPTIMIZE.

Exemple concret :

Avec un champ de type CHAR(200) : tu enregistre une chaine de 40 caractères, puis tu la remplace par une chaine de 150 puis par une de 10. Ton champ prendra toujours 200 octets en mémoire

Avec un champ de type VARCHAR(200) : tu enregistre une chaine de 40 caractères, ton champ prend 40 octets en mémoire. Tu remplace par une chaine de 150 octets. Ton champ prend 150 octets en mémoire. Tu remplaces par une chaine de 10 caractères, ton champs prend 150 octets en mémoire : eh oui tu perd 140 octets qui ne sont libérés que par un OPTIMIZE ou si tu enregistre une chaine d'au moins 140 caractères

Donc en résumé il faut bien choisir le type des champs en privilégiant les champs de type fixe comme CHAR. Si tu crée un forum, utilise 2 tables pour les messages. La première avec l'auteur, l'email, la date, l'IP, .. et l'autre table avec le message lui meme dans un champ TEXT


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.