Hola, Bien Gracias y Tú?
Te preguntaba cual era el query porque independientemente de si usaras DISTINCT en el SELECT, si efectuas las búsqueda y las columnas que aparecen en el SELECT estan indexadas, podrías devolver los valores directamente del index, sin necesidad del ACCESS FULL de la tabla aunque no estuviesen indexados los campos de búsqueda. Acorde a tu ejemplo al parecer no es el caso.
Para validar si no te hace ACCESS FULL TABLE revisa el xplain plan, con algo como lo siguiente:
Código:
explain plan for
SELECT columns FROM table(s) WHERE filter... --//ahi sustituirías por tu query.
select plan_table_output
from table(dbms_xplan.display('plan_table',null,'basic'));
Si como mencionas si va por esos campos, entonces no problem
Ejemplificando con el schema de HR de Oracle:
Código:
--//Realiza el acceso a través de la columna indexada a pesar de distinct aun cuando las columnas seleccionadas no están todas indexadas...
select distinct employee_id, first_name
from hr.employees where DEPARTMENT_ID=110;
--//Aquí aunque no se especifican columnas de búsqueda con WHERE, no se realiza ACCESS FULL, debido a que la columna seleccionada se encuentra indexada...
select max(DEPARTMENT_ID)
from hr.employees;
So, revisa el xplain plan, y asi despejaras la duda...
Como nota adicional dependiendo del número de filas de las tablas accesadas, el ACCESS FULL no siempre es negativo, si por ejemplo se trata de una tabla con pocos registros.
Saludos!