|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() |
Bonjour,
J'aimerai récupérer les fiches dont tous les résultats de la sous requête contiennent des valeurs null, pour toute une valeur Code, la table Client et Import ont le champs indice comme relation, des fiches peuvent contenir des valeurs nulls et d'autres pas par rapport à chaque valeur Code, et ce que je veux récupérer c'est uniquement ceux qui ont des valeurs nulls pour tous les enregistrement par rapport à la totalité des enregistrements de valeur Code=1 par exemple. Code :
Une remarque?
__________________
You probably have a very easy job, the kind robots will be doing soon. |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Heu... pas très clair en effet.
Dans un premier temps, votre predicat EXISTS sera toujours vrai, puisque COUNT(*) retourne toujours quelque chose, mais si ce quelque chose est 0 ! Donnez nous un jeu d'essai avec le résultat attendu (et expliqué), ce sera certainement plus clair... |
|
|
00
|
|
|
#3 | |
|
Membre actif
![]() |
Salut,
Citation:
C'est plus clair ?
__________________
You probably have a very easy job, the kind robots will be doing soon. |
|
|
|
00
|
|
|
#4 | ||
|
Membre actif
![]() |
Je me débrouille pour l'instant avec cette requête :
Code :
Sachant que le champ Indice est bien indexé. Une requête plus optimisée ?
__________________
You probably have a very easy job, the kind robots will be doing soon. |
||
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
que donne ceci
Code SQL :
|
||
|
|
00
|
|
|
#6 | ||
|
Membre actif
![]() |
aie, aie :
J'ai fais une modifs mais ça a pris 4 minutes, du coup je l'ai arrêté vu que je travaille sur des tables réelles, je promets de ne plus m'amuser sur ça Code :
ceux ci tout en respectant la condition C.indice = I1.indice, sans prendre considération de la valeur CODE, alors que c'est en fonction de celle ci qu'il faut sortir ces enregistrements, tu vois?
__________________
You probably have a very easy job, the kind robots will be doing soon. |
||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
|
|
|
00
|
|
|
#8 | |
|
Membre actif
![]() |
Citation:
On a une table IMPORT avec enregistrements : INDICE DATE_IMPORT CODE ---------------------------- 5000 date_quelconque 1321 5001 date_quelconque 1321 5002 date_quelconque 1321 5003 date_quelconque 5231 5004 date_quelconque 5231 la table CLIENT INDICE STATUS --------------- 5000 4 5001 NULL 5002 5 5003 NULL 5004 NULL Supposant que c'est tout ce qu'on a sur les deux tables. Le requête doit m'envoyer uniquement les enregistrements du code 5231, ceux ci sont les seuls qui respectent la condition (tous les enregistrement en rapport sur la table CLIENT ont la valeur du status NULL) la requête que tu as essayé renvoie même le code 1321. En effet ça aurait été plus simple comme ça =)
__________________
You probably have a very easy job, the kind robots will be doing soon. |
|
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
ok
que donne cette requête alors : Code SQL :
|
||
|
|
00
|
|
|
#10 | |||
|
Membre actif
![]() |
Citation:
Mais sans la modif que j'ai fais (en gras), la requête prend des dizaines de minutes pour s'exécuter, en utilisant le champ indice qui est indexé, le temps d'exécution est diminué à 21 secondes, j'ai plus de 3 millions d'enregistrements sur cette table Ta requête est bien plus optimisée que la mienne ![]() Merci
__________________
You probably have a very easy job, the kind robots will be doing soon. |
|||
|
|
00
|
|
|
#11 | ||||
|
Membre Expert
![]() |
Je pense qu'une vue indexée peut grandement améliorer les performances:
Code :
Pouvez vous tester? Code :
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||||
|
|
00
|
|
|
#12 | ||
![]() ![]() |
On peut jouer sur le fait que compter une colonne ne compte pas les nulls.
Sur votre exemple, ça fonctionne bien : Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#13 | ||||||
|
Membre actif
![]() |
Bonjour,
Citation:
Citation:
(je n'ai pas pu tester puisque la syntaxe de l'exemple ne tient pas sur sql server )
__________________
You probably have a very easy job, the kind robots will be doing soon. |
||||||
|
|
00
|
|
|
#14 | ||||||
![]() ![]() |
Citation:
Regardez, un exemple très simple : Code :
Citation:
Vous êtes peut-être en 2000 ? Si oui, je vous donne l'équivalent : Code :
__________________
Email : http://scr.im/waldar |
||||||
|
10
|
|
|
#15 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
10
|
|
|
#16 |
|
Membre actif
![]() |
Parfait
![]() Merci
__________________
You probably have a very easy job, the kind robots will be doing soon. |
|
|
00
|
|
|
#17 |
![]() ![]() |
Comment est-ce que ça répond en temps d'exécution en comparaison avec les autres requêtes ?
Et vous êtes bien en SQL-Server 2000 ?
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#18 | |
|
Membre actif
![]() |
Bonsoir,
Citation:
ça a pris 20 secondes au lieu de 21, pas trop de différence, mais ça reste important quand même.Bonne soirée
__________________
You probably have a very easy job, the kind robots will be doing soon. |
|
|
|
00
|
|
|
#19 | |
|
Membre Expert
![]() |
Citation:
En l'indexant (une vue indexée est une vue marquée avec le mot clez WITH SCHEMABINDING et sur laquelle vous créez un INDEX UNIQUE CLUSTER ce qui matérialise physiquement la base 'dans l'index') Donc c'est comme si vous travaillez sur une table beaucoups plus petites... Testez dans votre cas le gain peut être enorme...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#20 |
![]() ![]() |
Les vues indexées en SQL-Server 2000 je n'y crois pas trop !
__________________
Email : http://scr.im/waldar |
|
00
|
Copyright © 2000-2012 - www.developpez.com