Escribiendo código T-SQL eficientemente

795 views

Published on

Afianzar y renovar conceptos claves en la escritura de código T-SQL en nuestros escenarios de datos del día de hoy.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
795
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Las definiciones de estos datos puedenseranalizadas desde la descripción del mismo en el siguiente enlace: http://msdn.microsoft.com/es-es/library/ms174384.aspx.
  • Las definiciones de estos datos puedenseranalizadas desde la descripción del mismo en el siguiente enlace: http://msdn.microsoft.com/es-es/library/ms174384.aspx.
  • Las definiciones de estos datos puedenseranalizadas desde la descripción del mismo en el siguiente enlace: http://msdn.microsoft.com/es-es/library/ms174384.aspx.
  • Escribiendo código T-SQL eficientemente

    1. 1. Escribiendo código T-SQL eficientemente José Redondo - @redondoj | Jesús Gil - @jesus_gilv CL PASS Vzla – DPA SolidQ – Senior Consultant | RM PASS Latam – DPA SolidQ - Consultant redondoj.wordpress.com | blogs.solidq.com/jgil
    2. 2. GRABANDO SESIÓN
    3. 3. AGENDA • 00:00 - 00:05 Bienvenida/ Introducción moderador • 00:05 - 00:45 Presentación por el Speaker • 00:45 - 00:55 P&R Moderadas por el anfitrión • 00:55 - 01:00 Agradecimientos y cierre Gracias por Asistir
    4. 4. Asistencia Técnica • Asegúrate que todos estén en modo Mudo. • Por favor descarguen el cliente de Live Meeting. El cliente WEB no soporta Audio. • Clic en feedback (Parte superior derecha) y cambia tu estatus de color en caso de requerir apoyo del moderador. • Si tienes alguna pregunta, escríbela en el área de Preguntas & Respuestas.
    5. 5. Mantente conectado con nosotros • Te podrás registrar en todas las sesiones que tenemos planificadas a través de nuestro link http://bit.ly/SQLPASSVENEZUELA. • Cualquier cambio/actualización los mantenemos informados a través de nuestro sitio web www.venezuela.sqlpass.org y a través de nuestra cuenta en las redes sociales • Puedes contactarnos o escribir algo en Twitter a través de la cuenta @sqlpassve o postea con el tag #SQLPASSVE • Si tienes Facebook puedes seguirnos en la página de https://www.facebook.com/sqlpassvzla #SQLPASSVE
    6. 6. AGRADECIMIENTOS Agradecemos a nuestros patrocinadores por el apoyo a este evento y a SQL PASS VENEZUELA – Caracas Chapter José Redondo (Líder del Capítulo)
    7. 7. Capítulo SQL PASS Venezuela Caracas Chapter Líder: José G. Redondo López 4 miembros coordinadores y +15 colaboradores Somos una comunidad técnica de profesionales de SQL Server ubicada en la ciudad de Caracas, Venezuela Nos unimos con el fin de conectar, aprender y compartir nuestra experiencia en el campo profesional bajo la plataforma de datos SQL Server a través del intercambio de conocimientos e información apoyándonos para ello en eventos en línea, presenciales, uso de redes sociales, eventos regionales y locales. Trabajamos a la par con Microsoft y sus asociados para influenciar en la evolución de los productos y servicios de SQL Server. www.venezuela.sqlpass.org
    8. 8. AGENDA • Refactorización (Estandarizar, Probar y Refactorar) • Índices & Estadísticas • Demo • Escenarios de Pruebas y Testeo • Demo • Aplicando refactorización T-SQL • Demo • Conclusiones
    9. 9. Escribiendo código T-SQL eficientemente
    10. 10. Refactorización (Estandarizar, Probar y Refactorar)
    11. 11. Este proceso, a veces lo llamamos “Refactoring”. Que es eso? Es la “técnica disciplinada para la reestructuración de un cuerpo existente del código, alterando su estructura interna sin cambiar su comportamiento externo”
    12. 12. Compiladores • Acerca de… • Traduce un código a otro código • Los actuales… • Modulares (Diseñados para Técnicas de Desarrollo Modular) • Comparativo: • DB vs. Lenguaje Jerárquicos (dBase vs. C) - Inclusión
    13. 13. Estandarizar Probar Refactorar Antes de Refactorizar
    14. 14. Índices & Estadísticas
    15. 15. Índices & Estadísticas
    16. 16. Estadísticas •Para que sirven? •Para que las necesito? •Analizándolas…
    17. 17. Como puedo ver las Estadísticas?
    18. 18. Estadísticas de la Clave Primaria STAT_HEADER DENSITY_VECTOR HISTOGRAM
    19. 19. Estadísticas de Índices
    20. 20. No hay índice Solouno Tambiénvarios
    21. 21. Estandarizar Para que?
    22. 22. TABLAS ALIAS • No utilizar alias • Nombramientos de objetos ambiguos • Abreviaciones comunes
    23. 23. Ser consistente
    24. 24. PARAMETROS& NOMBREDE VARIABLES Tipo de datos Esquema
    25. 25. Ser consistente
    26. 26. Uniones • Es importante para la base de datos? • Y para nosotros es lo mismo?
    27. 27. Ser consistente
    28. 28. Apuesto a que vosotros han visto un tema en común
    29. 29. Ser consistente
    30. 30. DEMO
    31. 31. Escenarios de Pruebas y Testeo
    32. 32. PRUEBA TU ENTORNO SQL
    33. 33. PrecauciónPruebadedesarrollo NOES “EscenariodeProducción” Debemosprobar PRIMERO “EscenariodeProducción”
    34. 34. Aplicando refactorización T-SQL
    35. 35. Eliminar cosas inútiles
    36. 36. Removiendo uniones
    37. 37. Condiciones simples
    38. 38. Simplificando condiciones
    39. 39. WHERE (@Manager = 1 OR (p.PersonType = 'EM' AND p.EmailPromotion = 0)) OR (@State = 'OH' OR (s.BonusPct > 0.12)) OR (@IndustryType = 13 AND (e.YearsEmployed > 5 OR e.EducationLevel >= 2)) ; Condiciones simplificadas
    40. 40. Lógica ramificada
    41. 41. Condiciones simplificadas
    42. 42. Valores de Configuración
    43. 43. Obteniendo datos
    44. 44. Constantes embebidas
    45. 45. Constantes embebidas SELECT * FROM Person.Person WHERE PersonType = „EM‟ AND EmailPromotion = 0;
    46. 46. Constantes embebidas SELECT * FROM Person.Person WHERE PersonType = @PersonType AND EmailPromotion = @EmailPromotion;
    47. 47. DEMO
    48. 48. El horror de encontrar código no apropiado
    49. 49. Funciones no apropiadas
    50. 50. Funciones no apropiadas Un ejemplo NO APROPIADO: SELECT * FROM TBL_CualquierTabla WHERE DATEADD(yyyy, 4, DAT_Fechas) > GETDATE();
    51. 51. Funciones no apropiadas Un ejemplo APROPIADO: SELECT * FROM TBL_CualquierTabla WHERE DAT_Fechas > DATEADD(yyyy, -4, GETDATE());
    52. 52. Subconsultas correlacionadas
    53. 53. SELECT DISTINCT c.LastName, c.FirstName, e.BusinessEntityID, ( SELECT Bonus FROM Sales.SalesPerson sp WHERE e.BusinessEntityID = sp.BusinessEntityID ) AS Bonus FROM Person.Person AS c JOIN HumanResources.Employee AS e ON e.BusinessEntityID = c.BusinessEntityID; Un ejemplo
    54. 54. SELECT DISTINCT c.LastName, c.FirstName, e.BusinessEntityID, sp.Bonus FROM Person.Person AS c JOIN HumanResources.Employee AS e ON e.BusinessEntityID = c.BusinessEntityID JOIN Sales.SalesPerson AS sp ON e.BusinessEntityID = sp.BusinessEntityID; Otro ejemplo
    55. 55. Erradicar código repetido
    56. 56. SELECT SUM(weekday_rentals) weekday_rentals, SUM(weekend_rentals) weekend_rentals FROM ( SELECT sum(amount) weekday_rentals, 0 weekend_rentals FROM payment WHERE extract( dow FROM payment_date ) NOT IN (6, 0) UNION ALL SELECT 0 weekday_rentals, SUM(amount) weekend_rentals FROM payment WHERE extract( dow FROM payment_date ) IN (6, 0) ) x ; Un tercer ejemplo
    57. 57. SELECT SUM( CASE WHEN EXTRACT(dow FROM payment_date) NOT IN (6, 0) THEN amount ELSE 0 END) weekday_rentals, SUM( CASE WHEN EXTRACT(dow FROM payment_date) IN (6, 0) THEN amount ELSE 0 END) weekend_rentals FROM payment ; Un tercer ejemplo
    58. 58. DEMO
    59. 59. 1.- Establecer orden en la lógica de los procesos. 2.- Eliminar cursores. 3.- Dividir procesos en acciones resultantes. 4.- Probar cada escenario antes de consumirlo en producción. 5.- Evitar al máximo las improvisaciones. 6.- Utilizar cargas reales de trabajo. 7.- Usar datos reales en los procesos. 8.- Evitar reinventar la rueda a lo existente. CONCLUSIONES
    60. 60. PREGUNTAS & RESPUESTAS
    61. 61. CONTACTO Sitio web: http://venezuela.sqlpass.org/ Facebook: https://www.facebook.com/sqlpassvzla Twitter: https://twitter.com/sqlpassve
    62. 62. Los Invitamos al
    63. 63. Optimización de consultas utilizando estadísticas Fecha: Martes, Julio 30 de 2013 - 12:30 Hora Venezuela Speaker: Guillermo Taylor. Regístrese en: http://bit.ly/SQLPASSVENEZUELA Descripción: Aprovechar la información aportada por las estadísticas de los índices de tablas de datos para buscar la mejor manera de brindar resultados eficientes en nuestros sistemas de bases de datos del día de hoy. Próximo Webcast
    64. 64. Muchas gracias por su participación

    ×