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,