Bonjour,
J'utilise un programme éditeur, qui stocke ses booléens dans une colonne de type raw(1).
La base est sous Oracle 19c
Le client utilisé est 12.1
Aucun des deux ne peut changer.
Ensuite, dans les requêtes, qui semblent très mal écrites et pour lesquelles je n'ai absoluement pas la main, il fait ce genre de tests :
select macolonne from matable where LosKZ = '00'
LosKZ contenant donc un booléen 0x00 ou 0x01.
On a des soucis abomibales de performances : full scan systématique sur toutes les lignes, avec conversion de la colonne LosKZ en char(2) avant de comparer à la valeur '00'.
Chose très étrange, le souci ne semblait pas se produire quand on était en vesion 9 (serveur et client), pourtant c'était la même base et le même programme.
D'après le DBA le simple fait de rajouter un appel à la fonction hextoraw() sur la chaîne '00' permet de résoudre le souci, on tombe à quelques millisecondes.
select macolonne from matable where LosKZ = hextoraw('00')
Est-ce qu'il y a un moyen, d'une manière ou d'une autre, de résoudre ce souci ?
1/ Indexer la colonne to_char(LosKZ) ?
=> Que se passe-t-il si j'ai plusieurs colonnes de ce type dans les tables ? Oracle sait-il utiliser certains types d'index en parallèle dans une même requête ?
2/ Modifier une variable de session ou autre, permettant de dire à Oracle hey, '00' en vrai c'est hextoraw('00') ou changer le fonctionnement de la comparaison d'une chaîne à un raw ?
=> Petit papa Noël, quand tu descendras du ciel...
3/ Depuis le client Oralce, injecter directement dans les requêtes qui passent un bout de code pour changer le test sur ces colonnes ?
=> Et la marmotte...
D'autres idées ?
Partager