Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/08/2012, 10:09
Avatar de xf_corp
xf_corp
 
Fecha de Ingreso: mayo-2008
Mensajes: 57
Antigüedad: 16 años
Puntos: 3
Respuesta: distinct... y index de tabla

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!