En la salida del comando de explicación encontré dos términos 'Seq Scan' y 'Bitmap heap Scan'. ¿Alguien puede decirme cuál es la diferencia entre estos dos tipos de escaneo? (Estoy usando PostgreSql)¿Cuál es la diferencia entre el escaneo Seq y el escaneo del mapa de bits en postgres?
Respuesta
http://www.postgresql.org/docs/8.2/static/using-explain.html
Básicamente, un recorrido secuencial va a las filas reales, y comenzar a leer desde la fila 1, y continuará hasta que se satisfizo la consulta (esto puede no ser toda la tabla, ej., en el caso del límite)
El escaneo del mapa de bits significa que PostgreSQL ha encontrado un pequeño subconjunto de filas para buscar (por ejemplo, de un índice), y va a buscar solo esas filas. Esto, por supuesto, tendrá mucha más búsqueda, por lo que es más rápido solo cuando necesita un pequeño subconjunto de filas.
Tomemos un ejemplo:
create table test (a int primary key, b int unique, c int);
insert into test values (1,1,1), (2,2,2), (3,3,3), (4,4,4), (5,5,5);
Ahora, podemos obtener fácilmente una exploración siguientes:
explain select * from test where a != 4
QUERY PLAN
---------------------------------------------------------
Seq Scan on test (cost=0.00..34.25 rows=1930 width=12)
Filter: (a <> 4)
Se hizo un recorrido secuencial, ya que estima que va a agarrar la gran mayoría de la mesa ; tratar de hacer eso (en lugar de una gran lectura sin buscar) sería una tontería.
Ahora, podemos utilizar el índice:
explain select * from test where a = 4 ;
QUERY PLAN
----------------------------------------------------------------------
Index Scan using test_pkey on test (cost=0.00..8.27 rows=1 width=4)
Index Cond: (a = 4)
Y, por último, podemos obtener algunas operaciones de mapa de bits:
explain select * from test where a = 4 or a = 3;
QUERY PLAN
------------------------------------------------------------------------------
Bitmap Heap Scan on test (cost=8.52..13.86 rows=2 width=12)
Recheck Cond: ((a = 4) OR (a = 3))
-> BitmapOr (cost=8.52..8.52 rows=2 width=0)
-> Bitmap Index Scan on test_pkey (cost=0.00..4.26 rows=1 width=0)
Index Cond: (a = 4)
-> Bitmap Index Scan on test_pkey (cost=0.00..4.26 rows=1 width=0)
Index Cond: (a = 3)
Podemos leer esto como:
- Construir una mapa de bits de las filas que queremos para a = 4. (Exploración de índice de mapa de bits)
- Cree un mapa de bits de las filas que queremos para a = 3. (Exploración de mapa de bits de índice)
- O los dos mapas de bits juntos (BitmapOr)
- Mira esas filas en la tabla (mapa de bits Montón Scan) y comprobar para asegurarse de que a = 4 ó a = 3 (cond? Servicios)
[Sí, estos planes de consulta son estúpidos, pero eso es porque no analizó test
Tenía analizamos esto, todos estarían exploraciones secuenciales, ya que hay 5 pequeñas filas]
O un escaneo de mapa de bits también puede ser un subconjunto de escaneos de índice. – WolfmanDragon
@derobert, ¿qué quieres decir con "buscar"? No se puede encontrar ninguna mención de ello en ninguna parte ... – zapadlo
@Zapadlo Buscando como en una búsqueda de disco, por ejemplo, acceso aleatorio en lugar de secuencial. – derobert
- 1. ¿Cuál es la diferencia entre el escaneo activo y el escaneo pasivo?
- 2. Cuál es la diferencia entre el escaneo y el partido en la cadena Ruby
- 3. ¿Cuál es la diferencia entre Bitmap.Clone() y el nuevo mapa de bits (mapa de bits)?
- 4. Hacer el contexto: ¿forma de escaneo componente-escaneo?
- 5. Escaneo del índice hacia atrás en comparación con el escaneo del índice
- 6. StructureMap y conjuntos de escaneo
- 7. WIA Escaneo a través del alimentador
- 8. Escaneo de virus del lado del servidor
- 9. cuál es la diferencia entre mapa y hashmap en STL
- 10. Escaneo de teclas en Python
- 11. Diferencia entre un mapa de bits y una imagen de mapa de bits en WPF
- 12. ¿Cuál es la diferencia entre el conjunto <pair> y el mapa en C++?
- 13. ¿Cuál es la diferencia entre el colado y la coerción?
- 14. ¿Cuál es la diferencia entre el significante genérico "y el símbolo^en F # Método de firmas
- 15. Aumento de la velocidad de escaneo WiFi
- 16. Escaneo de anotaciones Java en el tiempo de ejecución
- 17. ¿Cuál es la diferencia entre el mango y el hilo?
- 18. ¿cuál es la diferencia entre el objetivo y el proyecto?
- 19. Backbone.Js - ¿Cuál es la diferencia entre el y $ el?
- 20. ¿Cuál es la diferencia entre el NSImage y el UIImage?
- 21. ¿Cuál es la diferencia entre el JSP y el JSTL?
- 22. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 23. ¿Cuál es la diferencia entre el tenedor y el hilo?
- 24. ¿Cuál es la diferencia entre el
- 25. ¿Cuál es la diferencia entre: = y + = en el archivo make?
- 26. ¿Cuál es la diferencia entre el operador "=" y "==" en Bash?
- 27. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 28. ¿Cuál es la diferencia entre el casting y la conversión?
- 29. ¿cuál es la diferencia entre el material y la textura?
- 30. diferencia entre el mapa y cada
en pocas palabras, "ss escanear "no usa índices (generalmente más lentos) y todos los demás escaneos intentan usar los índices definidos en la tabla. – Gnudiff