Je me pose une question par concernant les performances d'une recherche par
rapport aux index.
Je m'explique, vaux t'il mieux avoir (en terme de performance) :
Une table avec 4 index sur des champs [int] (des sous catégories de sous
sous catégorie ......) qui contiennent une valeur unique (pour l'ensemble de
la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit)
WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND
IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4 champs
Ou alors :
Une table qui contient 2 index [int] (une sous catégories et une sous sous
catégorie ) qui contiennent une valeur unique (pour l'ensemble de la base)
et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit)
WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2 champs
les deux autres étant présent dans la table mais oubliés pour la requette de
recherche
En sachant que la table peut contenir plusieurs centaines de milliers de
lignes et que le souci principale est la performance de la recherche.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Med Bouchenafa[MVP]
Quatre index distincts, un sur chacune des colonnes référencées dans la clause WHERE. L'optimiseur va alors utiliser les quatre index en même temps. Si les données sont effectivement uniques, ne pas oublier de créer des index UNIQUE. Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause (INDEX = IX_TbProduit)
SELECT * FROM TbProduit WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
-- Bien cordialement Med Bouchenafa TETRASET 75015 Paris "Eric" a écrit dans le message de news: c03f87$gu8$
Bonjour,
Je me pose une question par concernant les performances d'une recherche par rapport aux index.
Je m'explique, vaux t'il mieux avoir (en terme de performance) :
Une table avec 4 index sur des champs [int] (des sous catégories de sous sous catégorie ......) qui contiennent une valeur unique (pour l'ensemble de la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit) WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4 champs
Ou alors :
Une table qui contient 2 index [int] (une sous catégories et une sous sous catégorie ) qui contiennent une valeur unique (pour l'ensemble de la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit) WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2 champs les deux autres étant présent dans la table mais oubliés pour la requette de recherche
En sachant que la table peut contenir plusieurs centaines de milliers de lignes et que le souci principale est la performance de la recherche.
Merci pour vos réponses
Quatre index distincts, un sur chacune des colonnes référencées dans la clause WHERE.
L'optimiseur va alors utiliser les quatre index en même temps.
Si les données sont effectivement uniques, ne pas oublier de créer des index UNIQUE.
Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause (INDEX = IX_TbProduit)
SELECT * FROM TbProduit
WHERE IDCat1 = @IDCat1
AND IDCat2 = @IDCat2
AND IDCat3 = @IDCat3
AND IDCat4 = @IDCat4
--
Bien cordialement
Med Bouchenafa
TETRASET
75015 Paris
"Eric" <ericus@freesurf.fr> a écrit dans le message de news: c03f87$gu8$1@news-reader1.wanadoo.fr...
Bonjour,
Je me pose une question par concernant les performances d'une recherche par
rapport aux index.
Je m'explique, vaux t'il mieux avoir (en terme de performance) :
Une table avec 4 index sur des champs [int] (des sous catégories de sous
sous catégorie ......) qui contiennent une valeur unique (pour l'ensemble de
la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit)
WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND
IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4 champs
Ou alors :
Une table qui contient 2 index [int] (une sous catégories et une sous sous
catégorie ) qui contiennent une valeur unique (pour l'ensemble de la base)
et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit)
WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2 champs
les deux autres étant présent dans la table mais oubliés pour la requette de
recherche
En sachant que la table peut contenir plusieurs centaines de milliers de
lignes et que le souci principale est la performance de la recherche.
Quatre index distincts, un sur chacune des colonnes référencées dans la clause WHERE. L'optimiseur va alors utiliser les quatre index en même temps. Si les données sont effectivement uniques, ne pas oublier de créer des index UNIQUE. Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause (INDEX = IX_TbProduit)
SELECT * FROM TbProduit WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
-- Bien cordialement Med Bouchenafa TETRASET 75015 Paris "Eric" a écrit dans le message de news: c03f87$gu8$
Bonjour,
Je me pose une question par concernant les performances d'une recherche par rapport aux index.
Je m'explique, vaux t'il mieux avoir (en terme de performance) :
Une table avec 4 index sur des champs [int] (des sous catégories de sous sous catégorie ......) qui contiennent une valeur unique (pour l'ensemble de la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit) WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4 champs
Ou alors :
Une table qui contient 2 index [int] (une sous catégories et une sous sous catégorie ) qui contiennent une valeur unique (pour l'ensemble de la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit) WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2 champs les deux autres étant présent dans la table mais oubliés pour la requette de recherche
En sachant que la table peut contenir plusieurs centaines de milliers de lignes et que le souci principale est la performance de la recherche.
Merci pour vos réponses
Eric
Merci pour cette réponse, une question encore :
Si je veux faire un trie sur différent index en vu d'afficher une liste triée, je fait donc plusieurs index triés différamment et donc pour pour indiquer quel index doit utiliser la requette suivant le trie voulu je présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC) ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" a écrit dans le message de news:
Quatre index distincts, un sur chacune des colonnes référencées dans la
clause WHERE.
L'optimiseur va alors utiliser les quatre index en même temps. Si les données sont effectivement uniques, ne pas oublier de créer des
index UNIQUE.
Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause
(INDEX = IX_TbProduit)
SELECT * FROM TbProduit WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
-- Bien cordialement Med Bouchenafa TETRASET 75015 Paris "Eric" a écrit dans le message de news:
c03f87$gu8$
> Bonjour, > > Je me pose une question par concernant les performances d'une recherche
par
> rapport aux index. > > Je m'explique, vaux t'il mieux avoir (en terme de performance) : > > Une table avec 4 index sur des champs [int] (des sous catégories de sous > sous catégorie ......) qui contiennent une valeur unique (pour
l'ensemble de
> la base) et effectuer ce type de requette : > > SELECT * FROM TbProduit (INDEX = IX_TbProduit) > WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND > IDCat4 = @IDCat4 > > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4
champs
> > Ou alors : > > Une table qui contient 2 index [int] (une sous catégories et une sous
sous
> catégorie ) qui contiennent une valeur unique (pour l'ensemble de la
base)
> et effectuer ce type de requette : > > SELECT * FROM TbProduit (INDEX = IX_TbProduit) > WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4 > > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2
champs
> les deux autres étant présent dans la table mais oubliés pour la
requette de
> recherche > > En sachant que la table peut contenir plusieurs centaines de milliers de > lignes et que le souci principale est la performance de la recherche. > > Merci pour vos réponses > > >
Merci pour cette réponse, une question encore :
Si je veux faire un trie sur différent index en vu d'afficher une liste
triée, je fait donc plusieurs index triés différamment et donc pour pour
indiquer quel index doit utiliser la requette suivant le trie voulu je
présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC)
ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" <com.tetraset@Bouchenafa> a écrit dans le message de
news:ekJHR3i7DHA.1804@TK2MSFTNGP12.phx.gbl...
Quatre index distincts, un sur chacune des colonnes référencées dans la
clause WHERE.
L'optimiseur va alors utiliser les quatre index en même temps.
Si les données sont effectivement uniques, ne pas oublier de créer des
index UNIQUE.
Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause
(INDEX = IX_TbProduit)
SELECT * FROM TbProduit
WHERE IDCat1 = @IDCat1
AND IDCat2 = @IDCat2
AND IDCat3 = @IDCat3
AND IDCat4 = @IDCat4
--
Bien cordialement
Med Bouchenafa
TETRASET
75015 Paris
"Eric" <ericus@freesurf.fr> a écrit dans le message de news:
c03f87$gu8$1@news-reader1.wanadoo.fr...
> Bonjour,
>
> Je me pose une question par concernant les performances d'une recherche
par
> rapport aux index.
>
> Je m'explique, vaux t'il mieux avoir (en terme de performance) :
>
> Une table avec 4 index sur des champs [int] (des sous catégories de sous
> sous catégorie ......) qui contiennent une valeur unique (pour
l'ensemble de
> la base) et effectuer ce type de requette :
>
> SELECT * FROM TbProduit (INDEX = IX_TbProduit)
> WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND
> IDCat4 = @IDCat4
>
> Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4
champs
>
> Ou alors :
>
> Une table qui contient 2 index [int] (une sous catégories et une sous
sous
> catégorie ) qui contiennent une valeur unique (pour l'ensemble de la
base)
> et effectuer ce type de requette :
>
> SELECT * FROM TbProduit (INDEX = IX_TbProduit)
> WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
>
> Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2
champs
> les deux autres étant présent dans la table mais oubliés pour la
requette de
> recherche
>
> En sachant que la table peut contenir plusieurs centaines de milliers de
> lignes et que le souci principale est la performance de la recherche.
>
> Merci pour vos réponses
>
>
>
Si je veux faire un trie sur différent index en vu d'afficher une liste triée, je fait donc plusieurs index triés différamment et donc pour pour indiquer quel index doit utiliser la requette suivant le trie voulu je présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC) ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" a écrit dans le message de news:
Quatre index distincts, un sur chacune des colonnes référencées dans la
clause WHERE.
L'optimiseur va alors utiliser les quatre index en même temps. Si les données sont effectivement uniques, ne pas oublier de créer des
index UNIQUE.
Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause
(INDEX = IX_TbProduit)
SELECT * FROM TbProduit WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
-- Bien cordialement Med Bouchenafa TETRASET 75015 Paris "Eric" a écrit dans le message de news:
c03f87$gu8$
> Bonjour, > > Je me pose une question par concernant les performances d'une recherche
par
> rapport aux index. > > Je m'explique, vaux t'il mieux avoir (en terme de performance) : > > Une table avec 4 index sur des champs [int] (des sous catégories de sous > sous catégorie ......) qui contiennent une valeur unique (pour
l'ensemble de
> la base) et effectuer ce type de requette : > > SELECT * FROM TbProduit (INDEX = IX_TbProduit) > WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND > IDCat4 = @IDCat4 > > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4
champs
> > Ou alors : > > Une table qui contient 2 index [int] (une sous catégories et une sous
sous
> catégorie ) qui contiennent une valeur unique (pour l'ensemble de la
base)
> et effectuer ce type de requette : > > SELECT * FROM TbProduit (INDEX = IX_TbProduit) > WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4 > > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2
champs
> les deux autres étant présent dans la table mais oubliés pour la
requette de
> recherche > > En sachant que la table peut contenir plusieurs centaines de milliers de > lignes et que le souci principale est la performance de la recherche. > > Merci pour vos réponses > > >
Med Bouchenafa[MVP]
Pourquoi ne pas faire confiance à l'optimiseur ? C'est rare d'obtenir un résultat contraire aux attentes. Peux-tu préciser plus ce que tu comptes faire ?
-- Bien cordialement Med Bouchenafa TETRASET 75015 Paris "Eric" wrote in message news:c05iuc$5ie$
Merci pour cette réponse, une question encore :
Si je veux faire un trie sur différent index en vu d'afficher une liste triée, je fait donc plusieurs index triés différamment et donc pour pour indiquer quel index doit utiliser la requette suivant le trie voulu je présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC) ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" a écrit dans le message de news: > Quatre index distincts, un sur chacune des colonnes référencées dans la clause WHERE. > L'optimiseur va alors utiliser les quatre index en même temps. > Si les données sont effectivement uniques, ne pas oublier de créer des index UNIQUE. > Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la
clause
(INDEX = IX_TbProduit) > > SELECT * FROM TbProduit > WHERE IDCat1 = @IDCat1 > AND IDCat2 = @IDCat2 > AND IDCat3 = @IDCat3 > AND IDCat4 = @IDCat4 > > > -- > Bien cordialement > Med Bouchenafa > TETRASET > 75015 Paris > "Eric" a écrit dans le message de news: c03f87$gu8$ > > Bonjour, > > > > Je me pose une question par concernant les performances d'une
recherche
par > > rapport aux index. > > > > Je m'explique, vaux t'il mieux avoir (en terme de performance) : > > > > Une table avec 4 index sur des champs [int] (des sous catégories de
sous
> > sous catégorie ......) qui contiennent une valeur unique (pour l'ensemble de > > la base) et effectuer ce type de requette : > > > > SELECT * FROM TbProduit (INDEX = IX_TbProduit) > > WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND > > IDCat4 = @IDCat4 > > > > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4 champs > > > > Ou alors : > > > > Une table qui contient 2 index [int] (une sous catégories et une sous sous > > catégorie ) qui contiennent une valeur unique (pour l'ensemble de la base) > > et effectuer ce type de requette : > > > > SELECT * FROM TbProduit (INDEX = IX_TbProduit) > > WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4 > > > > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2 champs > > les deux autres étant présent dans la table mais oubliés pour la requette de > > recherche > > > > En sachant que la table peut contenir plusieurs centaines de milliers
de
> > lignes et que le souci principale est la performance de la recherche. > > > > Merci pour vos réponses > > > > > > > >
Pourquoi ne pas faire confiance à l'optimiseur ?
C'est rare d'obtenir un résultat contraire aux attentes.
Peux-tu préciser plus ce que tu comptes faire ?
--
Bien cordialement
Med Bouchenafa
TETRASET
75015 Paris
"Eric" <ericus@freesurf.fr> wrote in message
news:c05iuc$5ie$1@news-reader4.wanadoo.fr...
Merci pour cette réponse, une question encore :
Si je veux faire un trie sur différent index en vu d'afficher une liste
triée, je fait donc plusieurs index triés différamment et donc pour pour
indiquer quel index doit utiliser la requette suivant le trie voulu je
présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC)
ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" <com.tetraset@Bouchenafa> a écrit dans le message de
news:ekJHR3i7DHA.1804@TK2MSFTNGP12.phx.gbl...
> Quatre index distincts, un sur chacune des colonnes référencées dans la
clause WHERE.
> L'optimiseur va alors utiliser les quatre index en même temps.
> Si les données sont effectivement uniques, ne pas oublier de créer des
index UNIQUE.
> Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la
clause
(INDEX = IX_TbProduit)
>
> SELECT * FROM TbProduit
> WHERE IDCat1 = @IDCat1
> AND IDCat2 = @IDCat2
> AND IDCat3 = @IDCat3
> AND IDCat4 = @IDCat4
>
>
> --
> Bien cordialement
> Med Bouchenafa
> TETRASET
> 75015 Paris
> "Eric" <ericus@freesurf.fr> a écrit dans le message de news:
c03f87$gu8$1@news-reader1.wanadoo.fr...
> > Bonjour,
> >
> > Je me pose une question par concernant les performances d'une
recherche
par
> > rapport aux index.
> >
> > Je m'explique, vaux t'il mieux avoir (en terme de performance) :
> >
> > Une table avec 4 index sur des champs [int] (des sous catégories de
sous
> > sous catégorie ......) qui contiennent une valeur unique (pour
l'ensemble de
> > la base) et effectuer ce type de requette :
> >
> > SELECT * FROM TbProduit (INDEX = IX_TbProduit)
> > WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND
> > IDCat4 = @IDCat4
> >
> > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4
champs
> >
> > Ou alors :
> >
> > Une table qui contient 2 index [int] (une sous catégories et une sous
sous
> > catégorie ) qui contiennent une valeur unique (pour l'ensemble de la
base)
> > et effectuer ce type de requette :
> >
> > SELECT * FROM TbProduit (INDEX = IX_TbProduit)
> > WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
> >
> > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2
champs
> > les deux autres étant présent dans la table mais oubliés pour la
requette de
> > recherche
> >
> > En sachant que la table peut contenir plusieurs centaines de milliers
de
> > lignes et que le souci principale est la performance de la recherche.
> >
> > Merci pour vos réponses
> >
> >
> >
>
>
Pourquoi ne pas faire confiance à l'optimiseur ? C'est rare d'obtenir un résultat contraire aux attentes. Peux-tu préciser plus ce que tu comptes faire ?
-- Bien cordialement Med Bouchenafa TETRASET 75015 Paris "Eric" wrote in message news:c05iuc$5ie$
Merci pour cette réponse, une question encore :
Si je veux faire un trie sur différent index en vu d'afficher une liste triée, je fait donc plusieurs index triés différamment et donc pour pour indiquer quel index doit utiliser la requette suivant le trie voulu je présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC) ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" a écrit dans le message de news: > Quatre index distincts, un sur chacune des colonnes référencées dans la clause WHERE. > L'optimiseur va alors utiliser les quatre index en même temps. > Si les données sont effectivement uniques, ne pas oublier de créer des index UNIQUE. > Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la
clause
(INDEX = IX_TbProduit) > > SELECT * FROM TbProduit > WHERE IDCat1 = @IDCat1 > AND IDCat2 = @IDCat2 > AND IDCat3 = @IDCat3 > AND IDCat4 = @IDCat4 > > > -- > Bien cordialement > Med Bouchenafa > TETRASET > 75015 Paris > "Eric" a écrit dans le message de news: c03f87$gu8$ > > Bonjour, > > > > Je me pose une question par concernant les performances d'une
recherche
par > > rapport aux index. > > > > Je m'explique, vaux t'il mieux avoir (en terme de performance) : > > > > Une table avec 4 index sur des champs [int] (des sous catégories de
sous
> > sous catégorie ......) qui contiennent une valeur unique (pour l'ensemble de > > la base) et effectuer ce type de requette : > > > > SELECT * FROM TbProduit (INDEX = IX_TbProduit) > > WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND > > IDCat4 = @IDCat4 > > > > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4 champs > > > > Ou alors : > > > > Une table qui contient 2 index [int] (une sous catégories et une sous sous > > catégorie ) qui contiennent une valeur unique (pour l'ensemble de la base) > > et effectuer ce type de requette : > > > > SELECT * FROM TbProduit (INDEX = IX_TbProduit) > > WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4 > > > > Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2 champs > > les deux autres étant présent dans la table mais oubliés pour la requette de > > recherche > > > > En sachant que la table peut contenir plusieurs centaines de milliers
de
> > lignes et que le souci principale est la performance de la recherche. > > > > Merci pour vos réponses > > > > > > > >
Fred BROUARD
Non, un index n'est pas un tri !!!
Un index est une structure de données optimisé pour effectuer des recherches.
Le tri est une opération qui n'a rien à voir avec les index. En revanche si des index existent sur toutes les colonnes résultantes qui doivent être triées pour la réponse, l'effort de la procédure de tri sera minime parce que les données ont toutes les chances d'êtres traitées dans l'ordre...
Le sens de l'ordre ne change pas grand chose compte tenu qu'il s'agit d'une permutation à simple passe entre ASC et DESC.
A +
Eric a écrit:
Merci pour cette réponse, une question encore :
Si je veux faire un trie sur différent index en vu d'afficher une liste triée, je fait donc plusieurs index triés différamment et donc pour pour indiquer quel index doit utiliser la requette suivant le trie voulu je présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC) ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" a écrit dans le message de news:
Quatre index distincts, un sur chacune des colonnes référencées dans la
clause WHERE.
L'optimiseur va alors utiliser les quatre index en même temps. Si les données sont effectivement uniques, ne pas oublier de créer des
index UNIQUE.
Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause
(INDEX = IX_TbProduit)
SELECT * FROM TbProduit WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
-- Bien cordialement Med Bouchenafa TETRASET 75015 Paris "Eric" a écrit dans le message de news:
c03f87$gu8$
Bonjour,
Je me pose une question par concernant les performances d'une recherche
par
rapport aux index.
Je m'explique, vaux t'il mieux avoir (en terme de performance) :
Une table avec 4 index sur des champs [int] (des sous catégories de sous sous catégorie ......) qui contiennent une valeur unique (pour
l'ensemble de
la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit) WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4
champs
Ou alors :
Une table qui contient 2 index [int] (une sous catégories et une sous
sous
catégorie ) qui contiennent une valeur unique (pour l'ensemble de la
base)
et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit) WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2
champs
les deux autres étant présent dans la table mais oubliés pour la
requette de
recherche
En sachant que la table peut contenir plusieurs centaines de milliers de lignes et que le souci principale est la performance de la recherche.
Merci pour vos réponses
-- Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************
Non, un index n'est pas un tri !!!
Un index est une structure de données optimisé pour effectuer des
recherches.
Le tri est une opération qui n'a rien à voir avec les index.
En revanche si des index existent sur toutes les colonnes résultantes
qui doivent être triées pour la réponse, l'effort de la procédure de tri
sera minime parce que les données ont toutes les chances d'êtres
traitées dans l'ordre...
Le sens de l'ordre ne change pas grand chose compte tenu qu'il s'agit
d'une permutation à simple passe entre ASC et DESC.
A +
Eric a écrit:
Merci pour cette réponse, une question encore :
Si je veux faire un trie sur différent index en vu d'afficher une liste
triée, je fait donc plusieurs index triés différamment et donc pour pour
indiquer quel index doit utiliser la requette suivant le trie voulu je
présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC)
ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" <com.tetraset@Bouchenafa> a écrit dans le message de
news:ekJHR3i7DHA.1804@TK2MSFTNGP12.phx.gbl...
Quatre index distincts, un sur chacune des colonnes référencées dans la
clause WHERE.
L'optimiseur va alors utiliser les quatre index en même temps.
Si les données sont effectivement uniques, ne pas oublier de créer des
index UNIQUE.
Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause
(INDEX = IX_TbProduit)
SELECT * FROM TbProduit
WHERE IDCat1 = @IDCat1
AND IDCat2 = @IDCat2
AND IDCat3 = @IDCat3
AND IDCat4 = @IDCat4
--
Bien cordialement
Med Bouchenafa
TETRASET
75015 Paris
"Eric" <ericus@freesurf.fr> a écrit dans le message de news:
c03f87$gu8$1@news-reader1.wanadoo.fr...
Bonjour,
Je me pose une question par concernant les performances d'une recherche
par
rapport aux index.
Je m'explique, vaux t'il mieux avoir (en terme de performance) :
Une table avec 4 index sur des champs [int] (des sous catégories de sous
sous catégorie ......) qui contiennent une valeur unique (pour
l'ensemble de
la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit)
WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND
IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4
champs
Ou alors :
Une table qui contient 2 index [int] (une sous catégories et une sous
sous
catégorie ) qui contiennent une valeur unique (pour l'ensemble de la
base)
et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit)
WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2
champs
les deux autres étant présent dans la table mais oubliés pour la
requette de
recherche
En sachant que la table peut contenir plusieurs centaines de milliers de
lignes et que le souci principale est la performance de la recherche.
Merci pour vos réponses
--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto:brouardf@club-internet.fr ******************
Un index est une structure de données optimisé pour effectuer des recherches.
Le tri est une opération qui n'a rien à voir avec les index. En revanche si des index existent sur toutes les colonnes résultantes qui doivent être triées pour la réponse, l'effort de la procédure de tri sera minime parce que les données ont toutes les chances d'êtres traitées dans l'ordre...
Le sens de l'ordre ne change pas grand chose compte tenu qu'il s'agit d'une permutation à simple passe entre ASC et DESC.
A +
Eric a écrit:
Merci pour cette réponse, une question encore :
Si je veux faire un trie sur différent index en vu d'afficher une liste triée, je fait donc plusieurs index triés différamment et donc pour pour indiquer quel index doit utiliser la requette suivant le trie voulu je présise quel index doit être utilisé en ajoutant (INDEX = IX_TbProduitASC) ou (INDEX = IX_TbProduitDESC).
Correct ?
"Med Bouchenafa[MVP]" a écrit dans le message de news:
Quatre index distincts, un sur chacune des colonnes référencées dans la
clause WHERE.
L'optimiseur va alors utiliser les quatre index en même temps. Si les données sont effectivement uniques, ne pas oublier de créer des
index UNIQUE.
Cela aidera l'optimiseur. Par contre, il est inutile de rajouter la clause
(INDEX = IX_TbProduit)
SELECT * FROM TbProduit WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
-- Bien cordialement Med Bouchenafa TETRASET 75015 Paris "Eric" a écrit dans le message de news:
c03f87$gu8$
Bonjour,
Je me pose une question par concernant les performances d'une recherche
par
rapport aux index.
Je m'explique, vaux t'il mieux avoir (en terme de performance) :
Une table avec 4 index sur des champs [int] (des sous catégories de sous sous catégorie ......) qui contiennent une valeur unique (pour
l'ensemble de
la base) et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit) WHERE IDCat1 = @IDCat1 AND IDCat2 = @IDCat2 AND IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 4
champs
Ou alors :
Une table qui contient 2 index [int] (une sous catégories et une sous
sous
catégorie ) qui contiennent une valeur unique (pour l'ensemble de la
base)
et effectuer ce type de requette :
SELECT * FROM TbProduit (INDEX = IX_TbProduit) WHERE IDCat3 = @IDCat3 AND IDCat4 = @IDCat4
Donc dans le cas ci-dessus un index (IX_TbProduit) effectué sur les 2
champs
les deux autres étant présent dans la table mais oubliés pour la
requette de
recherche
En sachant que la table peut contenir plusieurs centaines de milliers de lignes et que le souci principale est la performance de la recherche.
Merci pour vos réponses
-- Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ****************** mailto: ******************