Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges *ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" a écrit dans le message
de news:
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute la
> condition est laissé apres where est laissée , l'index n'est pas utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges *ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" <hugueslouz@discussions.microsoft.com> a écrit dans le message
de news: AB81F6FB-0537-450E-9AEA-0D3D26D67ECB@microsoft.com...
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute la
> condition est laissé apres where est laissée , l'index n'est pas utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges *ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" a écrit dans le message
de news:
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute la
> condition est laissé apres where est laissée , l'index n'est pas utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges *ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" a écrit dans le
message
de news:
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :
Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges *ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" <hugueslouz@discussions.microsoft.com> a écrit dans le
message
de news: AB81F6FB-0537-450E-9AEA-0D3D26D67ECB@microsoft.com...
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges *ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" a écrit dans le
message
de news:
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Salut,
Optimisation :
préférer count(*) à une autres forme si c'est possible
si j'ai bien compris ton col3 est un char(1)
Dans ta requete tu test sa longueur !!!
Si il peut être à null pourquoi tu ne le test pas
Je traduit ta condition where en littéral
cela donne
(Col2 = 'Crietere' OR col2 IS NULL) AND (Col2 = 'Crietere' OR len(col3 =
0))
col2 est testé 2 fois dans ton premier OR !!!
Je ne sais pas si ma solution est bonne mais je te propose ceci
Select count(*) from ma_table where
ISNULL(Col2, 'Crietere' ) = 'Crietere' AND Col3 IS NULL
A+
Gilles
"hugueslouz" a écrit dans le
message de news:Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
Salut,
Optimisation :
préférer count(*) à une autres forme si c'est possible
si j'ai bien compris ton col3 est un char(1)
Dans ta requete tu test sa longueur !!!
Si il peut être à null pourquoi tu ne le test pas
Je traduit ta condition where en littéral
cela donne
(Col2 = 'Crietere' OR col2 IS NULL) AND (Col2 = 'Crietere' OR len(col3 =
0))
col2 est testé 2 fois dans ton premier OR !!!
Je ne sais pas si ma solution est bonne mais je te propose ceci
Select count(*) from ma_table where
ISNULL(Col2, 'Crietere' ) = 'Crietere' AND Col3 IS NULL
A+
Gilles
"hugueslouz" <hugueslouz@discussions.microsoft.com> a écrit dans le
message de news: AB81F6FB-0537-450E-9AEA-0D3D26D67ECB@microsoft.com...
Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
Salut,
Optimisation :
préférer count(*) à une autres forme si c'est possible
si j'ai bien compris ton col3 est un char(1)
Dans ta requete tu test sa longueur !!!
Si il peut être à null pourquoi tu ne le test pas
Je traduit ta condition where en littéral
cela donne
(Col2 = 'Crietere' OR col2 IS NULL) AND (Col2 = 'Crietere' OR len(col3 =
0))
col2 est testé 2 fois dans ton premier OR !!!
Je ne sais pas si ma solution est bonne mais je te propose ceci
Select count(*) from ma_table where
ISNULL(Col2, 'Crietere' ) = 'Crietere' AND Col3 IS NULL
A+
Gilles
"hugueslouz" a écrit dans le
message de news:Bonjour,
J'ai une requete suivante dans une application :
SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Col2 et col3 sont de type caractere
la table à 700000 lignes, un index existe sur col2 de type quand j'essaie
d'enlever la condition de AND , l'index est utilisé, mais quand toute la
condition est laissé apres where est laissée , l'index n'est pas utilisé
je
vois un scan de toute la table.
est-ce il y'a moyen de d'optimiser cette requete?
je vous remercie d'avance de votre aide.
Hugueslouz
Oui mais avec pour que A AND B soit vrai, il faut que A soit vrai et que B
soit vrai. Comme la partie col2 IS NULL de B est contradictoire avec A,
c'est comme si on n'avait que le critère sur COL3 dans B...
Essaie d'afficher les lignes :
SELECT * FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Tu ne verras à mon avis jamais une colonne COL2 NULL...
SELECT * FROM Ma_Table WHERE col2 = 'Crietere' AND LEN(col3)=0 devrait te
donner le même nombre de lignes
--
Patrice
"hugueslouz" a écrit dans le
message de news:je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges
*ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" a écrit dans le
message
de news:
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Oui mais avec pour que A AND B soit vrai, il faut que A soit vrai et que B
soit vrai. Comme la partie col2 IS NULL de B est contradictoire avec A,
c'est comme si on n'avait que le critère sur COL3 dans B...
Essaie d'afficher les lignes :
SELECT * FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Tu ne verras à mon avis jamais une colonne COL2 NULL...
SELECT * FROM Ma_Table WHERE col2 = 'Crietere' AND LEN(col3)=0 devrait te
donner le même nombre de lignes
--
Patrice
"hugueslouz" <hugueslouz@discussions.microsoft.com> a écrit dans le
message de news: BEF09A40-0B40-4A31-A2E5-7E61C8D52BF6@microsoft.com...
je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :
Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges
*ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" <hugueslouz@discussions.microsoft.com> a écrit dans le
message
de news: AB81F6FB-0537-450E-9AEA-0D3D26D67ECB@microsoft.com...
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Oui mais avec pour que A AND B soit vrai, il faut que A soit vrai et que B
soit vrai. Comme la partie col2 IS NULL de B est contradictoire avec A,
c'est comme si on n'avait que le critère sur COL3 dans B...
Essaie d'afficher les lignes :
SELECT * FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Tu ne verras à mon avis jamais une colonne COL2 NULL...
SELECT * FROM Ma_Table WHERE col2 = 'Crietere' AND LEN(col3)=0 devrait te
donner le même nombre de lignes
--
Patrice
"hugueslouz" a écrit dans le
message de news:je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges
*ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" a écrit dans le
message
de news:
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Oui mais avec pour que A AND B soit vrai, il faut que A soit vrai et que B
soit vrai. Comme la partie col2 IS NULL de B est contradictoire avec A,
c'est comme si on n'avait que le critère sur COL3 dans B...
Essaie d'afficher les lignes :
SELECT * FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Tu ne verras à mon avis jamais une colonne COL2 NULL...
SELECT * FROM Ma_Table WHERE col2 = 'Crietere' AND LEN(col3)=0 devrait te
donner le même nombre de lignes
--
Patrice
"hugueslouz" a écrit dans le
message de news:je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges
*ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" a écrit dans le
message
de news:
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Oui mais avec pour que A AND B soit vrai, il faut que A soit vrai et que B
soit vrai. Comme la partie col2 IS NULL de B est contradictoire avec A,
c'est comme si on n'avait que le critère sur COL3 dans B...
Essaie d'afficher les lignes :
SELECT * FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Tu ne verras à mon avis jamais une colonne COL2 NULL...
SELECT * FROM Ma_Table WHERE col2 = 'Crietere' AND LEN(col3)=0 devrait te
donner le même nombre de lignes
--
Patrice
"hugueslouz" <hugueslouz@discussions.microsoft.com> a écrit dans le
message de news: BEF09A40-0B40-4A31-A2E5-7E61C8D52BF6@microsoft.com...
je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :
Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges
*ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" <hugueslouz@discussions.microsoft.com> a écrit dans le
message
de news: AB81F6FB-0537-450E-9AEA-0D3D26D67ECB@microsoft.com...
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>
Oui mais avec pour que A AND B soit vrai, il faut que A soit vrai et que B
soit vrai. Comme la partie col2 IS NULL de B est contradictoire avec A,
c'est comme si on n'avait que le critère sur COL3 dans B...
Essaie d'afficher les lignes :
SELECT * FROM Ma_Table WHERE col2 = 'Crietere'
AND ((col2 IS NULL) OR len(col3 = 0))
Tu ne verras à mon avis jamais une colonne COL2 NULL...
SELECT * FROM Ma_Table WHERE col2 = 'Crietere' AND LEN(col3)=0 devrait te
donner le même nombre de lignes
--
Patrice
"hugueslouz" a écrit dans le
message de news:je te remercie Patrice, mais c'est vraiment ce que j'ai ecrit, en fait la
deuxieme condition vient d'une autre colonne qui est char(1) et doit etre
null ou 0.
la table fait 700000
"Patrice" a écrit :Déjà, le critère de base me parait bizarre (col2='critere' d'une part et
(col2 est null -- mais on a dit que l'on voulait 'critere' ?).
J'ai l'impression que le critère actuel revient à :
WHERE Col2='Critere' AND LEN(col3)=0 alors que tu voulais peut-être
col2='critere' or (col2 is null and len(col3)=0) ???
Attention au raccourci du langage parlé. Quand on dit je veux les
voitures
rouges et jaunes cela veut dire je veux les voitures qui sont rouges
*ou*
jaunes (pas la même rouge et jaune en même temps).
--
Patrice
"hugueslouz" a écrit dans le
message
de news:
> Bonjour,
> J'ai une requete suivante dans une application :
>
> SELECT count(1) FROM Ma_Table WHERE col2 = 'Crietere'
> AND ((col2 IS NULL) OR len(col3 = 0))
>
> Col2 et col3 sont de type caractere
> la table à 700000 lignes, un index existe sur col2 de type quand
> j'essaie
> d'enlever la condition de AND , l'index est utilisé, mais quand toute
> la
> condition est laissé apres where est laissée , l'index n'est pas
> utilisé
> je
> vois un scan de toute la table.
>
> est-ce il y'a moyen de d'optimiser cette requete?
>
> je vous remercie d'avance de votre aide.
>
> Hugueslouz
>
>
>