Bonjour,
J'ai actuellement une vue sur mon fichier ARTICLE qui contient
- société
- article
- fournisseur
- ref fournisseur
- REGEXP_REPLACE(ref fournisseur...) as shortref
Les critères de ma requête sql portent uniquement sur la société et la shortref.
L'exécution de la requête prend énormément de temps (40s).
Je n'arrive pas à trouver le bon index à mettre en place.
La shortref n'étant pas une zone du fichier article, je ne peux pas créer d'index dessus.
Nous avons cependant un logique sur société, ref fournisseur, mais l'optimiseur sql ne fait pas le lien entre shortref et ref fournisseur.
Pour info, lorsque je connais le fournisseur, l’optimiseur sql détecte un logique, puis créé la vue sur ce logique, la requête prend 1/2 seconde.
Merci pour votre aide.
Pb vue et index
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
REGEXP
Les expressions régulières peuvent être assez couteuses....
Mais, si , bien sur, vous pouvez faire un index ayant comme clé REGEXP_REPLACE(ref fournisseur...) as shortref
Mais, si , bien sur, vous pouvez faire un index ayant comme clé REGEXP_REPLACE(ref fournisseur...) as shortref
Code : Tout sélectionner
CREATE INDEX i1 on table T1 (REGEXP_REPLACE(ref fournisseur...) as shortref )
Christian Massé (Volubis.fr)
Bonjour,
J'ai essayé de créer l'index comme indiqué, mais sans résultat..
CREATE INDEX IARTICL01 ON ARTICL (ARTSOC, REGEXP_REPLACE(REGEXP_REPLACE(ARTREF, '\W', ''), '^0*', '') as SHORTREF ) ;
SQL State: 429BX
Vendor Code: -356
Message: [SQL0356] Expression d'index 0 non valide. Cause . . . . . : Expression d'index 0 non valide. Si le numéro d'expression est 0, soit l'expression est référencée dans la clause WHERE ou la clause INCLUDE, soit le numéro de colonne de la clé d'index est inconnu. L'expression est incorrecte pour l'une des raisons suivantes : -- L'expression fait référence à un registre spécial ou à une variable globale. -- L'expression contient une sous-requête. -- L'expression contient ROW CHANGE TIMESTAMP ou ROW CHANGE TOKEN. -- L'expression utilise une fonction d'agrégation (telle que AVG ou COUNT), une fonction qui n'est pas déterministe, une fonction définie par l'utilisateur ou une fonction système non autorisée. -- L'expression utilise la fonction scalaire NODENAME, DBPARTITIONNAME, DATAPARTITIONNAME ou DATAPARTITIONNUM. -- L'expression implique des objets LOB ou XML. Que faire . . . : Corrigez l'erreur, puis renouvelez la demande.
J'ai essayé de créer l'index comme indiqué, mais sans résultat..
CREATE INDEX IARTICL01 ON ARTICL (ARTSOC, REGEXP_REPLACE(REGEXP_REPLACE(ARTREF, '\W', ''), '^0*', '') as SHORTREF ) ;
SQL State: 429BX
Vendor Code: -356
Message: [SQL0356] Expression d'index 0 non valide. Cause . . . . . : Expression d'index 0 non valide. Si le numéro d'expression est 0, soit l'expression est référencée dans la clause WHERE ou la clause INCLUDE, soit le numéro de colonne de la clé d'index est inconnu. L'expression est incorrecte pour l'une des raisons suivantes : -- L'expression fait référence à un registre spécial ou à une variable globale. -- L'expression contient une sous-requête. -- L'expression contient ROW CHANGE TIMESTAMP ou ROW CHANGE TOKEN. -- L'expression utilise une fonction d'agrégation (telle que AVG ou COUNT), une fonction qui n'est pas déterministe, une fonction définie par l'utilisateur ou une fonction système non autorisée. -- L'expression utilise la fonction scalaire NODENAME, DBPARTITIONNAME, DATAPARTITIONNAME ou DATAPARTITIONNUM. -- L'expression implique des objets LOB ou XML. Que faire . . . : Corrigez l'erreur, puis renouvelez la demande.
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
REGEXP
Oups, il y a effectivement qq fonctions qui ne peuvent être utilisées comme clé d'index
mea culpa, mea maxima culpa....It must not contain any of the following:
Subqueries
Aggregate functions
Variables
Global variables
Parameter markers
Special registers
Sequence references
OLAP specifications
ROW CHANGE expressions
REGEXP_LIKE predicate
User-defined functions other than functions that were implicitly generated with the creation of a distinct type
Any function that is not deterministic
The following built-in scalar functions:
ATAN2 DLURLPATH MONTHNAME SCORE
CARDINALITY DLURLPATHONLY MONTHS_BETWEEN SOUNDEX
CONTAINS DLURLSCHEME NEXT_DAY TABLE_NAME
CURDATE DLURLSERVER OVERLAY TABLE_SCHEMA
CURTIME DLVALUE NOW TIMESTAMP_FORMAT
DATAPARTITIONNAME ENCRYPT_AES RAISE_ERROR TIMESTAMPDIFF
DATAPARTITIONNUM ENCRYPT_RC2 RAND TRUNC_TIMESTAMP
DAYNAME ENCRYPT_TDES REGEXP_COUNT VARCHAR_FORMAT
DBPARTITIONNAME GENERATE_UNIQUE REGEXP_INSTR VERIFY_GROUP_FOR_USER
DECRYPT_BINARY GETHINT REGEXP_REPLACE WEEK_ISO
DECRYPT_BIT IDENTITY_VAL_LOCAL REGEXP_SUBSTR WRAP
DECRYPT_CHAR INSERT REPEAT XMLPARSE
DECRYPT_DB LPAD REPLACE XMLVALIDATE
DIFFERENCE LOCATE_IN_STRING ROUND_TIMESTAMP XSLTRANSFORM
DLURLCOMPLETE 1 MAX_CARDINALITY RPAD
Modifié en dernier par cmasse le mar. 02 août 2016, 16:27:57, modifié 1 fois.
Christian Massé (Volubis.fr)