El 25 de junio de 2009 20:52, motum hesa<[email protected]> escribió:
> Muchas gracias a los comentarios de todos, son muy interesantes, ya lei los
> links que me mandaron y tomare en cuenta las sugerencias, sin embargo me
> asalta otra duda sobre lo mismo,... si declaro un int de 4 bytes y guardo un
> 0 es seguro que se reservan los 4 bytes.. pero si guardo un null tambien se
> reservan los 4 bytes?, saludos y gracias
>
>


Realicé unos bench (obviamente fueron hechos on-the-fly :) = propenso a errores.


CREATE TABLE pruebaNULL(
noNULL int NOT NULL default round(random()*1000)::int,
siNULL int)

-- sinull es la columna que contendrá los valores NULL.

insert into pruebaNULL(siNULL) values(select
round(random()*1000)::int); --varias veces

insert into pruebaNULL(siNULL)
(
SELECT CASE
        WHEN (generate_series::int > 256 and generate_series::int < 2000) THEN 
NULL
        ELSE generate_series::int
        END
FROM generate_series(1,100000)
)

parapruebas=# create index noNULL_ix on pruebanull (noNULL);
CREATE INDEX
parapruebas=# create index siNULL_ix on pruebanull (siNULL);
CREATE INDEX

REINDEX TABLE pruebaNULL;

parapruebas=# explain analyze select * from pruebanull where siNULL = 1890;
                                                     QUERY PLAN
---------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on pruebanull  (cost=12.13..480.62 rows=500 width=8)
(actual time=0.312..0.312 rows=0 loops=1)
   Recheck Cond: (sinull = 1890)
   ->  Bitmap Index Scan on sinull_ix  (cost=0.00..12.01 rows=500
width=0) (actual time=0.305..0.305 rows=0 loops=1)
         Index Cond: (sinull = 1890)
 Total runtime: 0.368 ms
(5 rows)

parapruebas=# explain analyze select * from pruebanull where noNULL = 1890;
                                                     QUERY PLAN
---------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on pruebanull  (cost=12.13..480.62 rows=500 width=8)
(actual time=0.149..0.149 rows=0 loops=1)
   Recheck Cond: (nonull = 1890)
   ->  Bitmap Index Scan on nonull_ix  (cost=0.00..12.01 rows=500
width=0) (actual time=0.143..0.143 rows=0 loops=1)
         Index Cond: (nonull = 1890)
 Total runtime: 0.216 ms
(5 rows)

parapruebas=# explain analyze select * from pruebanull where siNULL = 2500;
                                                     QUERY PLAN
---------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on pruebanull  (cost=12.13..480.62 rows=500 width=8)
(actual time=0.126..0.155 rows=2 loops=1)
   Recheck Cond: (sinull = 2500)
   ->  Bitmap Index Scan on sinull_ix  (cost=0.00..12.01 rows=500
width=0) (actual time=0.108..0.108 rows=2 loops=1)
         Index Cond: (sinull = 2500)
 Total runtime: 0.243 ms
(5 rows)

parapruebas=# explain analyze select * from pruebanull where noNULL = 2500;
                                                     QUERY PLAN
---------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on pruebanull  (cost=12.13..480.62 rows=500 width=8)
(actual time=0.063..0.063 rows=0 loops=1)
   Recheck Cond: (nonull = 2500)
   ->  Bitmap Index Scan on nonull_ix  (cost=0.00..12.01 rows=500
width=0) (actual time=0.055..0.055 rows=0 loops=1)
         Index Cond: (nonull = 2500)
 Total runtime: 0.131 ms
(5 rows)


Tengo entendido que en la mayoría de los motores, los valores NULL
afectan los indices.
Si hay algo de este bench que no concuerde haganmelo saber.



-- 
              Emanuel Calvo Franco
ArPUG [www.arpug.com.ar] / AOSUG Member
        www.emanuelcalvofranco.com.ar
--
TIP 6: �Has buscado en los archivos de nuestra lista de correo?
               http://archives.postgresql.org/pgsql-es-ayuda

Responder a