sql >> Base de Datos >  >> RDS >> Sqlserver

Optimización Sql:Xml o cadena delimitada

Ahora hay una cuarta opción:parámetros con valores de tabla , mediante el cual puede pasar una tabla de valores a un sproc como parámetro y luego usarla como lo haría normalmente con una variable de tabla. Preferiría este enfoque sobre el XML (o el enfoque de análisis de CSV)

No puedo citar cifras de rendimiento entre todos los diferentes enfoques, pero ese es uno que intentaría; recomendaría hacer algunas pruebas de rendimiento reales en ellos.

Editar:
Un poco más sobre los TVP. Para pasar los valores a su sproc, simplemente defina un SqlParameter (SqlDbType.Structured); el valor de esto se puede establecer en cualquier fuente IEnumerable, DataTable o DbDataReader. Entonces, presumiblemente, ya tiene la lista de valores en una lista/matriz de algún tipo; no necesita hacer nada para transformarla en XML o CSV.

Creo que esto también hace que el sproc sea más claro, más simple y más fácil de mantener, proporcionando una forma más natural de lograr el resultado final. Uno de los puntos principales es que SQL funciona mejor en actividades basadas en conjuntos/no en bucle/sin manipulación de cadenas.

Eso no quiere decir que funcionará muy bien con un gran conjunto de valores pasados. Pero con conjuntos más pequeños (hasta ~1000) debería estar bien.