comment faire une requête rapide
l'islam
J'ai testé ce codage SQL lors de la création d'une petite table, il contient des données de 4 lignes et j'obtiens une requête rapide, mais lorsque je passe à la vraie table en profondeur et ne me donne aucun résultat, cette table de vérité contient plus d'un million d'enregistrements
SELECT DISTINCT /*+ richs_secret_hint */
em_code, (to_date(end_date,'DD-MM-YYYY') - level + 1) AS days
FROM
islaam_vca where em_code = '2222'
CONNECT BY level <= (to_date(end_date,'DD-MM-YYYY') - to_date(start_date,'DD-MM-YYYY') + 1)
order by days ASC
;
donne moi un résultat rapide
quelqu'un m'aide comment obtenir un résultat rapide à partir d'une vraie table
artbro
- Il me semble que la combinaison de em_code et start_date est unique pour cette table, il devrait donc exister un index pour cette unicité :
CREATE UNIQUE INDEX islaam_vca_uk1 ON islaam_vca(em_code, start_date)
Deuxièmement, veuillez stocker les dates sous forme de type de données DATE, et non sous forme de chaîne.
Je l'ai testé un peu et il pourrait y avoir une situation, lorsque la requête essaiera TABLE ACCESS FULL pour la table islaam_vca, vous pouvez donc essayer de faire :
SELECT /*+ALL_ROWS*/ distinct em_code --sorry about my interpretation of secret your hint
, start_date
, NVL(end_date, SYSDATE) end_date --don't know if end date is nullable or now
, TRUNC(start_date) + level - 1 specific_date
FROM (SELECT em_code
, start_date
, end_date
FROM islaam_vca
WHERE em_code = '2222')
CONNECT BY level <= TRUNC(NVL(end_date, SYSDATE)) - TRUNC(start_date) + 1
order by specific_date;