Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 10h59   #1
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
Par défaut Suite de 0 et de 1 : quel type de champ ?

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.
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h10   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
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 ...
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h35   #3
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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.
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h45   #4
Rédacteur/Modérateur

 
Avatar de WOLO Laurent
 
Homme Laurent WOLO
Architecte de base de données
Inscription : mars 2003
Messages : 2 696
Détails du profil
Informations personnelles :
Nom : Homme Laurent WOLO
Âge : 35
Localisation : Congo-Brazzaville

Informations professionnelles :
Activité : Architecte de base de données
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 2 696
Points : 3 917
Points : 3 917
Envoyer un message via Yahoo à WOLO Laurent
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 !
WOLO Laurent est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h53   #5
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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' [...]
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 12h04   #6
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
re

Citation:
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.
cela fait 300 000 lignes par an, ce qui est vraiment très loin d’être monstrueux
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:
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
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 14h56   #7
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
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.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 09h51   #8
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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 ?
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 10h09   #9
Membre expérimenté
 
Avatar de jmnicolas
 
Homme
Développeur informatique
Inscription : juin 2007
Messages : 298
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Transports

Informations forums :
Inscription : juin 2007
Messages : 298
Points : 522
Points : 522
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.
jmnicolas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 11h31   #10
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
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.
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 12h21   #11
Membre confirmé
 
Homme Benjamin
Consultant informatique
Inscription : août 2007
Messages : 160
Détails du profil
Informations personnelles :
Nom : Homme Benjamin
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2007
Messages : 160
Points : 248
Points : 248
Tu as les types VARBINARY depuis 4.1.2 ...
Sinon tu peux stocker en faisant une conversion en décimal ou en hexa avant ...
bhamp0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h33.


 
 
 
 
Partenaires

Hébergement Web