Estoy escribiendo una aplicación que lee toda la tabla, procesa y luego escribe los datos resultantes en otra tabla. Estoy usando la clase SqlBulkCopy
(versión .net de "bcp in") que hace la inserción muy rápido. Pero no puedo encontrar ninguna forma eficiente de seleccionar datos en primer lugar. no hay .net equivalente de "bcp out", que me parece extraño.¿Cuál es la forma más rápida de seleccionar una tabla completa en SQL Server?
Actualmente estoy usando select * from table_name
. Por prespectiva, se requieren 2.5 segundos para seleccionar 6.000 filas ... y solo 600ms para insertar a granel el mismo número de filas.
Espero que la selección de datos siempre sea más rápida que la inserción. ¿Cuál es la forma más rápida de seleccionar todas las filas & columnas de una tabla?
Las respuestas a qeustions:
- Cronometré mi selección para tomar 2.5 segundos 2 maneras. Primero fue mientras ejecutaba mi aplicación y ejecutaba un rastreo sql. segundo estaba ejecutando la misma consulta en SSMS. Ambos retured sobre el mismo resultado.
- Estoy leyendo datos usando SqlDataReader.
- Ninguna otra aplicación está usando esta base de datos.
- Mi procesamiento actual tarda menos de 1 segundo, por lo que el tiempo de lectura de 2+ segundos es relativamente grande. Pero sobre todo estoy preocupado (interesado) en el rendimiento al escalar esto hasta 100.000 filas y millones de filas.
- Sql Server 08r2 y mi aplicación se ejecutan en mi máquina de desarrollo.
- Parte del procesamiento de datos se establece por lo que necesito tener toda la tabla en memoria (para admitir conjuntos de datos mucho más grandes, sé que este paso probablemente deba trasladarse a SQL, así que solo necesito operar por fila en memoria)
Aquí está mi código:
DataTable staging = new DataTable();
using (SqlConnection dwConn = (SqlConnection)SqlConnectionManager.Instance.GetDefaultConnection())
{
dwConn.Open();
SqlCommand cmd = dwConn.CreateCommand();
cmd.CommandText = "select * from staging_table";
SqlDataReader reader = cmd.ExecuteReader();
staging.Load(reader);
}
¿Cuánto tiempo tarda su procesamiento? – Andrey
¿Cómo estás midiendo estos 2.5 segundos? ¿En SSMS o en tu aplicación? Si lo anterior, ¿qué sucede si activa la opción "Descartar resultados después de la ejecución" para eliminar el tiempo de procesamiento de SSMS? Si este último ¿Cómo recupera la aplicación las filas? ¿Está utilizando un lector de datos, por ejemplo? ¿Cómo se ve tu código? –
Mientras está leyendo en esta tabla, ¿otras aplicaciones escriben en la tabla? Si es así, puede intentar usar la opción "CON (NOLOCK)". – WiseGuyEh