IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Problème sur une requête SQL


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Problème sur une requête SQL
    Bonjour,

    En cours de développement d'un site, je rencontre un problème que je n'arrive pas à solutionner...

    lorsqu'un nouveau membre s'inscrit sur mon site, il renseigne les champs suivant qui sont enregistrés dans ma base de données,

    je suis ................... 01-un homme 02-une femme

    Il pourra après son inscription lancer une recherche, afin de trouver la ou les personnes qui lui correspondent...Les champs pour la recherche sont:

    je recherche........... 01-un homme 02-une femme 03-un homme ou une femme

    Dans le choix 03-un homme ou une femme ( qui devra donc afficher les profils hommes et/ou femmes) La valeur n'étant pas enregistrée au départ dans ma base, il ne peut y avoir de correspondance,

    comment donc faire, pour que la sélection 03 recherche dans la base de données avec les valeurs 01 et 02 ???

    Si quelqu'un peu m'aiguiller, ou me donner son avis, car la, je bloque un peu ...

    Merci à tous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Quelque comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  tbl.*
    FROM    matable tbl
    WHERE   :je_cherche IN  (tbl.je_suis, '03')
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par claudelefevre Voir le message
    comment donc faire, pour que la sélection 03 recherche dans la base de données avec les valeurs 01 et 02 ???
    La solution la plus simple ne serait-elle pas de ne pas mettre de condition se rapportant à ce critère dans la clause WHERE dans ce cas précis ? Variante : une condition toujours vraie...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #4
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonsoir dorinf

    Le problème est que je suis obligé de mettre des conditions dans ce critères, car dans la même requête, un 01-homme devra pouvoir trouver 02-une femme ainsi que l'inverse..
    entre 01-homme et 02-femme, cela fonctionne bien, et j'ai besoin de ces 2 critères qui affichent soit hommes soit femmes ....
    Mais comment en plus dans ma requête pouvoir rechercher sur 03 qui doit afficher hommes et femmes correspondants ...??

    Et Si je ne donne pas de valeur à ma variable exemple if($jerecherche == 03){$jerecherche = ""} je pense que la requête ne trouvera aucun profil
    Bon, je continue de creuser et je vais tout de même tester...

    Bonne soirée et merci beaucoup pour ta réponse..

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    C'était une simple suggestion Une manière de dire aussi que parfois, il ne faut pas hésiter à faire plusieurs requête spécifique plutôt que d'avoir une seule requête "usine à gaz". Bon, ici, une seule requête est amplement suffisant.

    As-tu essayé la méthode proposée par al1_24 ? Elle doit marcher en principe.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  6. #6
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonsoir al1_24

    Merci beaucoup pour ta réponse, je vais également tester ta solution,
    mais si j'utilise IN, dans ma requête qui doit également rechercher uniquement 01-hommes ou uniquement 02-femme, je pense que dans ces cas la requêtes affichera en résultat hommes et femmes à chaque fois non ??
    c'est a dire si on fait une recherche homme cherche femme, on obtiendra en résultat homme et femme, et non pas seulement femme .
    Bon je vais vérifier tout ça ...

    Encore merci et bonne soirée

  7. #7
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci à tous les deux pour votre aide, j'ai finalement réussi à faire fonction la recherche sur homme et femme, en utilisant un or puis un IN a l'intérieur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($Jrechgenre == 03){$Jrechgenrehomme = "01"; $Jrechgenrefemme = "02";}
     
    "SELECT * FROM table_membres WHERE Genre LIKE '" . $Jrechgenre . "' OR (Genre IN ('" . $Jrechgenrehomme . "','" . $Jrechgenrefemme . "'))";
    Bonne continuation , A bientôt..Claude

  8. #8
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Ta solution est bien compliquée. La solution proposée par al1_24 devrait marcher telle quelle.

    Si on reprend la clause WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE   :je_cherche IN  (tbl.je_suis, '03')
    Regardons tous les cas :
    • Tu cherches un homme : je_cherche vaut 01. Tu sélectionnes donc toutes les lignes donc 01 est dans l'ensemble {'03', colonne je_suis}. Comme de toute évidence, 01 != 03, cela revient donc à sélectionner les lignes qui ont dans leur colonne je_suis la valeur '01' ;
    • Tu cherches une femme : je_cherche vaut 02. Idem que ci-dessus.
    • Tu cherches un homme ou une femme : je_cherche vaut 03. 03 est dans l'ensemble {'03', colonne je_suis}. Tu sélectionnes donc toutes les lignes.


    Cela répond donc à ton besoin. Inutile de faire un OR qui complique grandement ta requête.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  9. #9
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour dorinf, merci pour la réponse.

    en faite dans l'exemple de al1_24 je ne comprends pas trop à quoi correspond tbl.je_suis .... je pense que c'est en fait ma $Jrechgenre ??

    Donc pour mon code, ça donnerai quelque chose comme

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM table_membres WHERE Genre IN( '" . $Jrechgenre . "', 03)"

    Bien je vais tester ça ....A bientôt

  10. #10
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    C'est presque ça. Tu as juste inversé des choses dans la clause WHERE

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM table_membres WHERE '". $Jrechgenre ."' IN( Genre, 03)"

    C'est bien ton champs de rechercher $Jrechgenre qui peut valoir 01, 02 ou 03, et non la colonne GENRE qui, comme tu nous l'as dis plus haut, ne peut valoir que 01 ou 02.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  11. #11
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour dorinf,

    Arghh, j'ai testé, et ça ne fonctionne pas bien, voici mon code

    "SELECT * FROM table_membres WHERE '". $Jrechgenre ."' IN( Genre, 03)"


    voici ce que j'obtiens en debug,

    SELECT * FROM table_membres WHERE '03' IN( Genre, 03)

    Pour cette femme qui recherche un homme ou une femme, les profils de femmes recherchant uniquement un homme s'affichent également, et c'est pas bon ..
    également pour cette femme qui recherche uniquement une femme les profils de femmes recherchant uniquement hommes s'affichent aussi...

    Merci pour ton aide, a bientôt

  12. #12
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Pour le moment je continue les test la dessus...Bonne journée

  13. #13
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Je pense surtout que le problème initial était mal posé.

    Voici tel que je l'avais compris :
    • j'ai un profil, où je peux dire si je suis un homme ou une femme ;
    • je peux faire une recherche pour trouver les hommes, les femmes, ou les deux.


    Avec ton dernier message, ce que je comprends, c'est qu'il faut tenir compte de la préférence des profils, c'est-à-dire que :
    • j'ai toujours un profil où je peux dire si je suis un homme ou une femme ;
    • je peux préciser mes attentes : je recherche un homme, une femme, ou les deux ;
    • je peux effectuer une recherche pour trouver les hommes, les femmes, ou les deux.


    La différence, c'est que ta recherche doit inclure l'attente du profil (par exemple, si tu recherches une femme qui cherche un homme, tu veux exclure des résultats les femmes qui recherchent uniquement les femmes). Cette précision, tu ne l'as pas fournie initialement ! Il est donc normal qu'on n'ait pas pu en tenir compte.

    Il manque donc une condition dans ta clause WHERE afin de tenir compte des "envies" des profils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM table_membres WHERE '". $Jrechgenre ."' IN( Genre, 03) AND envie IN (".$JmonGenre.", 03)"
    où la variable $JmonGenre correspond à mon sexe (suis-je un homme une ou femme).
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  14. #14
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    D'où l'utilité de poster dès le départ la structure des tables en jeu, ou au moins leurs colonnes utiles à la résolution du problème.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  15. #15
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Euh... Et sinon, avec un masque binaire ?

    Nan parceque voilà quoi...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    create table personne
    (
    	id int not null identity primary key,
    	nom varchar(10) not null,
    	sexe tinyint not null
    );
    go
     
    insert into personne (nom, sexe) values ('Jean', 1), ('Paul', 1), ('Paulette', 2), ('Géraldine', 2);
     
    declare @rec tinyint;
     
    set @rec = 1; --(soit 0x01)
    select * from personne where sexe & @rec > 0;
    set @rec = 2; --(soit 0x10)
    select * from personne where sexe & @rec > 0;
    set @rec = 3; --(soit 0x11)
    select * from personne where sexe & @rec > 0;

    En effet, 0x01 AND 0x01 = 0x01 donc > 0
    En effet, 0x01 AND 0x10 = 0x00 donc = 0
    En effet, 0x10 AND 0x01 = 0x00 donc = 0
    En effet, 0x10 AND 0x10 = 0x10 donc > 0
    En effet, 0x11 AND 0x01 = 0x01 donc > 0
    En effet, 0x11 AND 0x10 = 0x10 donc > 0

    (je dis ça, je dis rien...)
    On ne jouit bien que de ce qu’on partage.

  16. #16
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour dorinf,

    ce que je voulais te préciser, c'est que en fait, effectivement,

    • l'utilisateur peut toujours créer un profil où il peut dire si je suis un homme ou une femme ;
    • l'utilisateur peut préciser ses attentes : je recherche un homme, une femme, ou les deux ;

    • l'utilisateur peut effectuer une recherche pour trouver les hommes, les femmes, ou les deux, oui..., je lance bien une recherche avec certains critères, mais dans cette recherche, l'utilisateur ne précisera pas ses critères de recherche, car ils sont déjà enregistrés par:

    • l'utilisateur peut préciser ses attentes : je recherche un homme, une femme, ou les deux ;

    Je vais tester ton code , et je te tiens au courant, je voulais juste te donner ces précisions afin de savoir si ça peu fonctionner ...Merci beaucoup

  17. #17
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2014
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Bonjour StringBuilder,

    ouuu, bien compliqué pour moi tout ça...En binaire ???

    Merci quand même..

  18. #18
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Pourtant, si ton SGBD supporte l'opérateur "&", c'est bien ce qui sera le plus performant (en plus d'être le plus simple d'un point de vue logique).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select p2.*
    from personne p1
    inner join p2 on p2.sexe & p1.recherche > 0
    where p1.id = @user_id
    => Retrouve toutes les personnes (p2) dont le sexe correspond à ce que recherche ton utilisateur (p1).
    Pas de IN, pas de valeurs littérales, utilisation des index, quoi demande le peuple ?
    On ne jouit bien que de ce qu’on partage.

  19. #19
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Autant je trouve la solution élégante, autant j'ai de gros doutes là dessus :

    Citation Envoyé par StringBuilder
    c'est bien ce qui sera le plus performant (en plus d'être le plus simple d'un point de vue logique).

    Concernant la logique, ça reste une question de goût mais sera je pense mois facilement lisible/compréhensible qu'un OR.
    Concernant les performance, étant donné qu'il y a un calcul a effectuer sur la colonne indexée (p2.sexe & p1.recherche), une recherche d'index ne sera pas possible, à l'inverse d'un OR qui peut être sargable dans certains cas.
    Je dirai donc qu'au point de vue performances, cette solution sera au mieux équivalente (fort probable ici d'ailleurs vu qu'il n'y a que trois valeurs possibles), au pire moins bonne (cas probable d'un index couvrant qui engendrera probablement des recherches et non des analyses d'index pour une requete avec OR)

  20. #20
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    En effet, après test, pas d'utilisation de l'index.

    En même temps, vu que sexe ne peut contenir que 2 valeurs distincts en aucun cas il est possible de l'indexer (aucune gain possible).
    (et d'ailleurs, même si par hasard le & suivit de = était optimisé pour utiliser les index, il ne serait pas étonnant qu'un tel index soit écarté par l'optimiseur de toute façon).

    A ce moment, je reste persuadé que le & = sera plus rapide qu'un IN (ou alors faut vraiment que Microsoft renvoie ses ingénieurs en première année de BTS...)

    En effet, d'un point de vue processeur un masque binaire + test 0 se traduit par 2 cycles CPU (AND puis JZ/JNZ).

    Alors qu'un IN, en espérant qu'on a un type qui tient dans un registre (donc pas de CHAR(2)), on va avoir au minium 2 cycles par valeur testée (CMP puis JNE). Donc en supposant une répartition égale entre ceux qui cherche h ou f et h et f, on arrive à un code 50% plus lent avec le IN
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. [MySQL] Problème sur une requête SQL
    Par julienmop dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 14/06/2015, 21h47
  2. Probléme sur une requête SQL
    Par ggoncalves dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/10/2012, 15h45
  3. Problème sur une requête SQL
    Par Jezlife dans le forum Bases de données
    Réponses: 8
    Dernier message: 18/03/2012, 10h35
  4. Problème sur une requête SQL
    Par juju05 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/06/2010, 18h20
  5. Problème sur une requête SQL (PL/SQL)
    Par goofyrocks dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/01/2009, 17h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo