Estoy probando diferentes consultas y tengo curiosidad sobre cómo decide db usar Bitmap Heap Scan y Index Scan.¿Cómo se decide la exploración de mapa de bits y el análisis de índice?
crear índice customers_email_idx en clientes (correo electrónico varchar_pattern_ops);
Como puede ver, hay una tabla de clientes (ejemplo dellstore) y añado un índice a la columna de correo electrónico.
primera consulta está aquí:
seleccionar * de los clientes donde el correo electrónico como 'ITQ%@dell.com'; -> consulta con Index Scan
Explicar analizar consulta está aquí:
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------
Index Scan using customers_email_idx on customers (cost=0.00..8.27 rows=2 width=268) (actual time=0.046..0.046 rows=0 loops=1)
Index Cond: (((email)::text ~>=~ 'ITQ'::text) AND ((email)::text ~<~ 'ITR'::text))
Filter: ((email)::text ~~ 'ITQ%@dell.com
'::text)
Total runtime: 0.113 ms
Otros consulta está aquí:
seleccionar * de los clientes donde el correo electrónico como 'TI% @ dell.com '; -> consulta con mapa de bits Montón Scan
Explicar analizar consulta está aquí:
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on customers (cost=4.54..106.77 rows=2 width=268) (actual time=0.206..0.206 rows=0 loops=1)
Filter: ((email)::text ~~ 'IT%@dell.com
'::text)
-> Bitmap Index Scan on customers_email_idx (cost=0.00..4.54 rows=29 width=0) (actual time=0.084..0.084 rows=28 loops=1)
Index Cond: (((email)::text ~>=~ 'IT'::text) AND ((email)::text ~<~ 'IU'::text))
Total runtime: 0.273 ms
¿Puede explicar por qué este ejemplo se utiliza mapa de bits y el índice de escaneo aquí?
Gracias ..
Ver @ de araqnid y esto: http : //wiki.postgresql.org/images/4/45/Explaining_EXPLAIN.pdf Busque 'index scan'. La clave puede ser 'optimizador puede elegirla [exploración de mapa de bits] para cualquier exploración indexable con baja selectivity' – dezso
Creo que esta pregunta podría encajar en apenas muy bien en dba.SE. –