Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
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 20/09/2006, 10h58   #1
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 126
Points : 38
Points : 38
Par défaut Créer un index particulier

Bonjour,

Je suis débutant au niveau SQL et je cherche un moyen pour faire un index qui ne reprendrait que les valeurs = 0 ou > 0 par exemple.

D'habitude mes index "simples" je les fesais comme cela :

Citation:
CONNECT TO BDD_1;
CREATE INDEX DB2ADMIN.NAME ON BDD_1.NAME (champ_a,champ_b) PCTFREE 10 MINPCTUSED 10 COLLECT STATISTICS ;
CONNECT RESET;
Je voudrais rajouter que le champ: champ_c soit = 0 ou > 0 quelque chose comme cela...

Est ce que c'est possible?

Merci.
ptr83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 11h26   #2
Xo
Expert Confirmé
 
Avatar de Xo
 
Inscription : janvier 2005
Messages : 2 701
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2005
Messages : 2 701
Points : 3 237
Points : 3 237
Envoyer un message via Skype™ à Xo
Salut,

merci de préciser votre SGBD SVP,

Pour info, la notion d'Index est étrangère au langage SQL
__________________
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau

"Expliquer empêche de comprendre si cela dispense de chercher"

Quiz Oracle : venez tester vos connaissances !

La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
Xo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 11h26   #3
Membre Expert
 
Avatar de zooro
 
Inscription : avril 2006
Messages : 922
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2006
Messages : 922
Points : 1 149
Points : 1 149
Bonjour,

Tu n'as pas précisé ce que tu utilises comme SGBD.
Je ne vois pas trop comment faire ce que tu demandes...

D'ailleurs, je ne comprends pas bien à quoi pourrait servir un index ne contenant qu'une partie des valeurs du champ ?
Le but de l'index est de pouvoir retrouver facilement tous les enregistrements ayant une valeur donnée. C'est un peu comme dans une bibliothèque, où un index permettrait de retrouver un livre à partir des premières lettres de son titre par exemple. Ce serait curieux de limiter l'index à certaines lettres par exemple !

Si, par contre, tu veux contraindre les données de ton champs pour que seuls des valeurs positives puissent y être insérées, il ne faut pas passer par un index, mais par des contraintes (la syntaxe dépend du SGBD).
__________________
[alkama] quelqu'un est allé voir la guerre des mondes?
[@Chrisman] j'espère pour spielberg
--- bashfr.org
zooro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 11h30   #4
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 126
Points : 38
Points : 38
Excusez moi, mon SGBD c'est DB2... Désolé je ne savais pas que la notion d'Index est étrangère au langage SQL
ptr83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2006, 16h29   #5
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 126
Points : 38
Points : 38
Finalement j'ai fait une vue du type:

CREATE view BDD_1.NAME
AS
SELECT *
FROM BDD_1.NAME AS NAM
WHERE NAM.CHAMP_C > 0
ptr83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2006, 16h36   #6
Membre Expert
 
Avatar de zooro
 
Inscription : avril 2006
Messages : 922
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2006
Messages : 922
Points : 1 149
Points : 1 149
Pas de rapport avec les index.
Je ne comprends toujours pas ce que tu voulais faire

Enfin, si ta solution résoud ton problème, tant mieux Dans ce cas, n'oublie pas .
__________________
[alkama] quelqu'un est allé voir la guerre des mondes?
[@Chrisman] j'espère pour spielberg
--- bashfr.org
zooro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2006, 11h56   #7
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 126
Points : 38
Points : 38
Citation:
Envoyé par zooro
Pas de rapport avec les index.
Je ne comprends toujours pas ce que tu voulais faire
Cela va accélérer les processus non? Par exemple si j'ai 16 millions d'enregistrements, avec ma vue je n'en aurai plus que 4 millions disons...
ptr83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2006, 12h02   #8
Membre Expert
 
Avatar de zooro
 
Inscription : avril 2006
Messages : 922
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2006
Messages : 922
Points : 1 149
Points : 1 149
Citation:
Envoyé par ptr83
Cela va accélérer les processus non? Par exemple si j'ai 16 millions d'enregistrements, avec ma vue je n'en aurai plus que 4 millions disons...
Hum... Il va utiliser l'index sur le champ CHAMP_C de la table pour exécuter la requête SELECT de contruction de ta vue view BDD_1.NAME. Ensuite, il exécutera ta requête sur la vue.
Bon, je ne sais pas comment l'optimiseur gèrera celà, mais je ne suis pas sûr que tu sois vraiment gagnant.
Et de toute façon, il faudra utiliser un index sur ta table globale pour calculer la vue...
__________________
[alkama] quelqu'un est allé voir la guerre des mondes?
[@Chrisman] j'espère pour spielberg
--- bashfr.org
zooro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2006, 21h02   #9
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Citation:
Envoyé par zooro
Hum... Il va utiliser l'index sur le champ CHAMP_C de la table pour exécuter la requête SELECT de contruction de ta vue view BDD_1.NAME. Ensuite, il exécutera ta requête sur la vue.
Bon, je ne sais pas comment l'optimiseur gèrera celà, mais je ne suis pas sûr que tu sois vraiment gagnant.
Et de toute façon, il faudra utiliser un index sur ta table globale pour calculer la vue...
En effet, il n'y a aucun gain. Le risque est même de diminuer les performance en obligeant l'optimizer à passer par un chemin qui ne sera pas forcément le meilleur sur l'ensemble des deux requêtes (view + select sur la view).

si j'ai bien compris l'idée de base était de ne mettre dans l'index que les enregistrements respectant le filtre. L'index aurrait alors pu être parcouru plus rapidement. Ce qui n'est d'ailleur vrai que dans certaines circonstances.

A ma connaisance, cette possibilité n'existe pas.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h43.


 
 
 
 
Partenaires

Hébergement Web