Oracle - Uso de indices

 
Vista:

Uso de indices

Publicado por iriover (7 intervenciones) el 02/06/2008 12:19:24
CASO A )
SELECT COUNT(1) FROM POLIZA WHERE N_POLIZA > 900 hace un FULL SCAN
CASO B)
SELECT COUNT(1) FROM POLIZA WHERE N_POLIZA = 900 va por indice.

La tabla POLIZA tiene una primary key por N_POLIZA (number) y claro esta un indice por N_POLIZA.
El caso A realiza un full scan y el caso B no.

Hay 299.992 registros y solo al realizar SELECT COUNT(1) FROM POLIZA WHERE N_POLIZA > 266033 es cuando entra por el índice, a falta de 33967 registros si es superior a este numero no entra por el índice.

¿podria alguien decirme por que? ¿como hacer que vaya por el indice sin forzar el uso de dicho indice?

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Uso de indices

Publicado por Pedro (25 intervenciones) el 03/06/2008 11:33:30
Hola buenos dias:

La planificación que te esta haciendo es la buena, el porque es muy simple, cuando le pones el > obligas a la tabla a que se tenga que ordenar (internamente) para que el resultado que te muestre sea el correcto, para ello no le queda mas remedio que hacerle un full a la tabla y en el segundo caso al igualar ya si que tienes que entrar al indice y ya luego acceder a la tabla, en ningun momento te recomendaría que forzaras el indice en el primer caso. Por tanto la planficación que esta haciendo en ambos casos es la correcta, (hay que tener en cuenta que no siempre hacer full a la tabla es malo, solo hay que saber cuando se hacen, cuando hay que hacerlos y sobretodo controlarlos). Asi que todo depende del resto de operaciones y de lo que quieras hacer

Espero haberte ayudado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Uso de indices

Publicado por iriover (7 intervenciones) el 03/06/2008 12:25:13
Si Pedro me has ayudado mucho. Efectivamente no siempre es malo realizar una full table y todo dependiendo del resto de las operaciones se pordria y de hecho se optimiza mejor esta pequeña parte de un proceso que debo de optimizar para cuyo rendimiento sea el mas optimo posible y no nos penalicen por ello.

Gracias de Nuevo Pedro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar