Bonjour,
J’ai un problème avec une requête paramétrée qui utilise par moment l’index de PK et d’autrefois non.
J’ai une table de 15 000 000 d’enregistrements de 500 colonnes en Sybase.
La clé primaire est composée de 5 champs. La première colonne de la Pk est celle où il y a le plus de valeurs distinctes ( environ 150 000 ), les autres champs qui composent la clé n’ont pas plus de 100 valeurs distinctes.
J’ai créé une boucle qui paramètre une requête sur la colonne 1 de la PK. Il Elle prend des intervalles de valeurs de 2 ou 3000 valeurs à chaque fois.
La requête est simple dans le sens où c’est un select de 50 champs sur celle seule table.
Ex :
Table_Syb avec PK col1 asc, col2 asc, col3 asc, col4 asc, col5 asc
Boucle suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Select col1, col2 col50 From Table_Syb Where col1 between 0 and 1999 .
Chaque boucle retourne un nombre différent de lignes mais ramène entre 50 000 et 1 500 000 lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Select col1, col2 col50 From Table_Syb Where col1 between 2000 and 4000
Sur certaines boucles, l’index de PK est utilisé, sur d’autres il ne l’est pas, il fait un table scan.
Depuis quelques temps, le traitement fonctionne de cette manière mais avant il fonctionnait très bien en utilisant systématiquement l’index de la PK.
Entre ces 2 moments, il y a eu une insertion de 300 000 lignes dans la table.
Le seul moyen que j’ai trouvé pour qu’il utilise l’index à chaque requête, c’est de spécifier tous les champs de la clé comme ceci :
Boucle suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Select col1, col2 col50 From Table_Syb Where col1 between 0 and 1999 And col2 between 1 and 100 And col3 between 1 and 100 And col4 between 1 and 100 And col5 between 1 and 100 .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Select col1, col2 col50 From Table_Syb Where col1 between 2000 and 4000 And col2 between 1 and 100 And col3 between 1 and 100 And col4 between 1 and 100 And col5 between 1 and 100
Quelqu’un a-t-il déjà rencontré cela ? Est-ce un comportement normal ? et dans le cas contraire quelqu’un a-t-il une solution plus propre ou à une piste à tester?
Merci d'avance de vos réponses.
Partager