|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Pierrot Développeur Web Inscription : novembre 2010 Messages : 79 ![]() |
Bonjour à tous et à toute,
J'ai une table contenant un champ 'calendrier' ou sont stockés des valeurs de 365 ou 366 caractères (autant que de jours dans l'année utilisée). Ex : 00001000100001111011011..... Une requête utilise régulièrement ce champ sur cette table. Je souhaite utiliser le meilleur type de champ possible pour améliorer les performances. Pour l'instant, j'ai choisi un TEXT(366), pas terrible donc. Je ne vois pas quel autre type de champ utiliser. Avez-vous une idée ? Merci. |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
a mon avis
le mieux serait d'avoir une table des "jours utilises" ne contenant que la cle primaire, la cle etrangere et une colonne date. et avec une requete, on peut generer les "jour non-utilises" mais cela n'est peut etre pas possible ... |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Pierrot Développeur Web Inscription : novembre 2010 Messages : 79 ![]() |
Merci pour ta réponse Olivier.
J'avais prévu ce type d'architecture, mais ça va faire beaucoup de données ! Je vais avoir en gros, chaque année, 3000 lignes pour ma table `calendrier`. Si je dispatche les jours_actifs (1) dans une table à côté, il y aura trop de lignes dans cette table. Ex pour un enregistrement de 300 jours actifs => Table `calendrier` : 1 ligne, Table `jours_actifs` : 300 lignes. Le tout multiplié par 3000. C'est pour cela que j'avais opter pour ce système de 0 et de 1. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() |
Je ne saisis pas bien le but de ce choix.
__________________
Découvrez la FAQ de MS SQL Server. La chance accorde ses faveurs aux esprits avertis ! |
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Pierrot Développeur Web Inscription : novembre 2010 Messages : 79 ![]() |
Pour tester si le jour est actif ou non, je récupère le numéro du jour dans l'année avec un date('z',$date) en php.
Ex : Code :
[...] SUBSTRING(CalSe.calendrier,'".mysql_real_escape_string(date("z",timestamp($date_trajet))+1)."',1) = '1' [...] |
|
|
00
|
|
|
#6 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
re
Citation:
![]() et en terme d'espace disque, calcule l'espace occupé par 3000 lignes d'une chaine de caractères de 366 car, avec 1 million de lignes composées d'une colonne integer et date... Par ailleurs et surtout, c'est bien plus performant en terme de réponse à ce type de requête : Citation:
|
||
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() Développeur informatique Inscription : juin 2007 Messages : 298 ![]() |
Au final c'est du binaire ton truc ... il faudrait voir s'il y a un type binaire dans ton SGBD et tester les perfs.
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle. |
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() Pierrot Développeur Web Inscription : novembre 2010 Messages : 79 ![]() |
Olivier ---> Ce sera ma dernière option, plus propre certes, mais compliquée à mettre en place car implique beaucoup de modification dans ma programmation.
Nicolas ---> C'est du MySQL, le champ BLOB permet de stocker du binaire mais n'est pas très différent de TEXT non ? |
|
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() Développeur informatique Inscription : juin 2007 Messages : 298 ![]() |
Ben si parce que chaque character de ton texte occupe au moins 8 bits, voir 16 si c'est de l’Unicode, alors qu'en binaire chaque 0 ou 1 occuperait 1 bit.
Mais bon ce ne sont que des conjectures, il faudrait tester pour voir si ça fait une vraie différence.
__________________
The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle. |
|
|
00
|
|
|
#10 |
|
Membre régulier
![]() Pierrot Développeur Web Inscription : novembre 2010 Messages : 79 ![]() |
Les types de champs BLOB et TEXT ont les mêmes contraintes de stockage.
Donc je ne vois pas l'intérêt. Mais je ne suis pas un expert en la matière, peut-être que j'oublie quelque chose. La seule solution est sans doute de passer par une table intermédiaire comme l'a expliqué Olivier. |
|
|
00
|
|
|
#11 |
|
Membre confirmé
![]() Benjamin Consultant informatique Inscription : août 2007 Messages : 160 ![]() |
Tu as les types VARBINARY depuis 4.1.2 ...
Sinon tu peux stocker en faisant une conversion en décimal ou en hexa avant ... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com