10

¿Cuál de la siguiente consulta es mejor ... Esto es sólo un ejemplo, existen numerosas situaciones, en el que necesito el nombre de usuario que se mostrará en lugar de ID de usuariocombinación interna Vs función escalar

Select EmailDate, B.EmployeeName as [UserName], EmailSubject 
    from Trn_Misc_Email as A 
     inner join 
     Mst_Users as B on A.CreatedUserID = B.EmployeeLoginName 

o

Select EmailDate, GetUserName(CreatedUserID) as [UserName], EmailSubject 
    from Trn_Misc_Email 

Si no hay ninguna ventaja de rendimiento en el uso de la Primera, preferiría usar la segunda ... me sería tener alrededor de 2000 registros en la tabla de usuario y 100k registros en la tabla de correo electrónico ...

Gracias

+0

¿Has probado esto por ti mismo? –

Respuesta

11

una buena pregunta y grandes a estar pensando en el rendimiento de SQL, etc.

Desde un punto de vista puramente SQL el primero es mejor. En la primera declaración, puede hacer todo en un solo comando por lotes con una combinación. En el segundo, para cada fila en trn_misc_email, se debe ejecutar una selección BATCH separada para obtener el nombre de usuario. Esto podría causar un problema de rendimiento ahora, o en el futuro

También es más fácil de leer para cualquier persona que ingrese al proyecto, ya que pueden ver lo que está sucediendo. Si tuvieras el segundo, entonces tienes que ir y buscar en la función (supongo que así es) para averiguar qué está haciendo.

En realidad, dos razones para usar la primera razón.

3

El SQL JOIN en línea generalmente será better than the scalar UDF ya que se puede optimizar mejor.

Al probarlo, asegúrese de utilizar el Analizador de SQL para ver el costo de ambas versiones. SET STATISTICS IO ON no informa el costo de las UDF escalares en sus figuras, lo que haría que la versión escalar de UDF parezca mejor de lo que realmente es.

+0

¿Tiene alguna referencia que me ayude a comprender el plan de ejecución y las estadísticas Informaciones –

+3

@The King? Consulte este ebook gratuito ["Disección de los planes de ejecución de SQL Server" por Grant Fritchey] (http: //downloads.red-gate. com/ebooks/HighPerformanceSQL_ebook.zip) –

1

Para obtener más información, solo un consejo, en el servidor SQL que utiliza el estudio Managment, puede evaluar el rendimiento por Display Estimated execution plan. Se muestra cómo funcionan los índices y la combinación y puede seleccionar la mejor manera de usarlo.

También puede usar el DTA (Database Engine Tuning Advisor) para obtener más información y optimización.

+1

Las UDF escalares simplemente se tratan como una caja negra en esto, creo. –

+1

¿Tiene alguna referencia que me ayude a comprender el plan de ejecución y las estadísticas? –

+0

@Martin Smith, no, el plan de ejecución se muestra claramente con todos los pasos y lo que sucede como costo, .... Puede probarlo usted mismo. Además de un caché UDF escalar el plan de ejecución para optimizar la ejecución en las próximas ejecuciones –

Cuestiones relacionadas