Besoin d'aide pour choisir index [Résolu]

Messages postés
7
Date d'inscription
dimanche 7 mars 2004
Statut
Membre
Dernière intervention
26 février 2014
- - Dernière réponse : nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
- 4 mars 2014 à 16:34
Bonjour,

Une table contenant moult champs et moult enregistrement, je souhaite rajouter un index.

La recherche utilisateur porte sur 3 champs (type, n°,nom), le résultat doit être trié par date (ce champs existe dans la table).

Si je construit ma requete ainsi :
select type,n°,nom from ma_table where type = saisie and etc... order by date

l'index suivant sera-til utilisé : index on (date + type + n° +nom) ?

GrunK
Afficher la suite 

5 réponses

Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16
0
Merci
salut

pas nécessairement, l'optimiseur foire son choix d'index avec l'order by (j'ai eu souvent le cas).

Du coup ou m'a donné une astuce : forcer l'indexe . En mySQL c'est FORCE INDEX, mais en SQL la synthaxe serai :
WITH (INDEX(mon_indexe))
( http://blog.sqlauthority.com/2009/02/07/sql-server-introduction-to-force-index-query-hints-index-hint/)

Du coup tu oblige l'optimiseur à utiliser ton index.

naga
Commenter la réponse de nagaD.scar
0
Merci
Merci pour ta réponse.
Très instructif.

Malheureusement je ne suis pas sur MySQL, mais sur un vieux sgbd type fichiers ou il n'existe pas d'équivalent à FORCE INDEX.
jordane45
Messages postés
26551
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 octobre 2019
316 -
je ne suis pas sur MySQL, mais sur un vieux sgbd type fichiers
Et lequel ?
( Chose que tu aurais surement du indiquer au moment où tu as posé ta question..... non ??....)
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
ah ok, tu as posté dans SQL, c'est pour ca que j'avais mis
WITH (INDEX(mon_indexe))
.

même question que jordane donc^^
Commenter la réponse de GrunK
0
Merci
peu de chance que vous connaissiez CRITERIA ...

En fait ma question est surtout d'un point de vue théorique, car je n'ai même pas la possibilité de vérifier quand si index est utilisé ou non (comme dans MySQL).
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
en effet je ne connais pas, mais donc ton message n'est pas à sa place : tu ne peux pas faire l'amalgame du comportement de l'optimiseur d'une sgbd avec une autre, ca reviendrai à dire que quelque soit la personne qui développe, il a la même logique et la même manière d'interpréter des données .
Commenter la réponse de GrunK
0
Merci
c'est juste.

N'étant pas un spécialiste de l'optimisation de BDD, je me posais juste la question si, en théorie, ma requête utiliserai l'index ?

En fait je souhaite savoir une clause where sur 3 champs + un order by sur un 4eme utiliserai un index composite de ces 4 champs ?
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
je dirai que la solution la plus simple serai de récupérer les résultats non triés dans une sous requête. Au moins le tri se fera après récupération des résultats, la requête de base devrai utiliser l'index .
Je ne peut pas récup le résultat de ma requête dans une table tempo / tableau / curseur pour la trier ensuite.
Dans Criteria, les enregistrements correspondants à une requête sont marqués (flag), il faut ensuite parcourir le fichier dans l'ordre croissant.
C'est pour cela que l'utilisation d'un index m'aiderai bien.
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
la table temporaire reste une table, si tu créé et supprime ta table à la volée le fonctionnement sera globalement le même (et ca te permet d'utiliser l'index pour alimenter cette table qui pourra être indexé par sa date).

à part ca je n'ai pas de solution à te proposer, le fonctionnement de ta sgbd semble assez proche de hyperion (j'ai taffé dessus du coup) et pareil c'était très limité (avec quelques "blagues", où les éléments filtrant de ta requête vont parfois masquer des colonnes de résultat -_-').
Commenter la réponse de GrunK
0
Merci
Je vais utiliser cet index, je verrai à l'usage si les temps de réponse sont satisfaisant.

Merci de tes réponses.

A+
nagaD.scar
Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16 -
pas de soucis, dsl de ne pas avoir pu plus t'aider ^^
bondev

naga
Commenter la réponse de GrunK