Bueno, ya siento tardar tanto en respoder
At 20:24 31/05/2011, Jaime Casanova wrote:
2011/5/31 Eduardo Morras <nec...@retena.com>:
> Tenia entendido precisamente que no, que hay que hacer un tablescan porque
> el usar mvcc impide conocer en el indice que filas/registros estan activos
> para la consulta actual y cuales pertenecen a
otras transacciones anteriores
> y pueden mostrar datos borrados o actualizados.
>
ah! es que en postgres un index scan siempre requiere luego leer la
tabla para verificar la visibilidad... es decir, una cosa es que use
el índice pero eso no evita que luego deba leer la tabla pero no leera
*toda* la tabla sino solo las paginas necesarias para verificar la
visibilidad de esos registros (por eso es que para usar el indice la
condicion es que sea una pequeña porcion de la tabla, de lo contrario
terminaria leyendo toda la tabla igual y seria mas rapido leer la
tabla directamente en lugar de visitar el indice)
A esto me refiero, si la tabla es estatica con
datos que sabemos que no se van a modificar, como
datos historicos, diccionarios de datos, etc...;
no hace falta realizar una comprobacion de la
visibilidad. En caso de necesitar un valor que
involucre mas del 10-20% o el limite que sea de
la tabla para hacer un table scan, se podra usar
el index scan ya que sabemos por construccion de
la tabla que no es modificable y el indice
refleja fielmente el contenido de la misma. Hacer
un count() de toda la tabla obliga a hacer
sin embargo si tu consulta incluye varios campos indexados podria
usarlos para formar un bitmap index y eso te permitira usar los
indices aun para una porcion mayor de la tabla
O para toda la tabla si fuese no modificable.
Un saludo y muchas gracias
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda