Bonjour,
une de mes tables est très souvent lue (~1000 lectures / 1 écriture) ; un profiling qualitatif sur mon process m'a montré que la récupération de donnée sur cette table était mon bottle neck ; je cherche donc à optimiser ma requête (peu probable) ou son exécution par la création d'un index sur une des colonnes.
La table :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE TABLE "VALIDATIONS" ( "ACCOUNT" VARCHAR2(48 CHAR) NOT NULL ENABLE, "EVENT_DATE" DATE NOT NULL ENABLE, "STATUS" NUMBER(1,0) NOT NULL ENABLE, "OP_NAME" VARCHAR2(128 BYTE), "EVENT_COMMENT" NVARCHAR2(1024) ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "USERS" ;
Vous noterez le fait qu'aucune clé primaire ou contrainte d'unicité existe. De ce fait, aucun index n'a été créé par Oracle. Voici l'unique façon dont je lis cette table :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT account, to_char(event_date, 'yyyy-mm-dd') as event_date, status, CASE WHEN to_char(event_date, 'YYYYMMDD') = to_char(CURRENT_DATE, 'YYYYMMDD') THEN 'TRUE' -- peut mieux faire ? ELSE 'FALSE' END AS is_today, op_name, event_comment FROM VALIDATIONS WHERE status > 0 AND ACCOUNT = :account -- bound variable ORDER BY event_date DESC
Des conseils ?
Cdlt,
Partager