Una de las razones es simple de responder:
Cita: la Tabla tiene varios indices, uno soble LKT_ABFAHRT_VON
Eso implica que tienes un campo DATE y un índice sobre este campo, el cual si no me equivoco alamcena fechas largas (Dias y horas).
Pero estás usando un TRUNC():
Código SQL:
Ver originalAND TRUNC (t.LKT_ABFAHRT_VON) BETWEEN '24.01.2014' AND '24.02.2014'
Eso, te comento, hace que oracle
descarte el índice, y realice un
full table scan.
Lo que te conviene en ese caso es hacer que las fechas del BETWEEN se tomen como DATETIME:
Código SQL:
Ver originalSELECT *
FROM DISPO2.TB_LKW_TOUR t,
DISPO2.VI_AUFTRAG_AUF_LKW a
WHERE T.LKT_ID = A.LKT_ID
AND T.MND_NR = 1
AND T.NDL_NR = 117
AND t.LKT_ABFAHRT_VON BETWEEN TO_DATE('24/01/2014 00:00:00', 'dd/mm/yyyy hh24:mi:ss') AND TO_DATE('24/01/2014 23:59:59', 'dd/mm/yyyy hh24:mi:ss')
Por engorroso que parezca, eso es más eficiente.
Ten en cuenta que
siempre que aplicas una función sobre un campo que está indexado, el índice
se descarta, porque Oracle no puede, a priori, saber si la función no suprime las características de las claves.