Recherche conseil d'optimisation de requête : index possible
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:
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:
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,