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
Jul 02, 2015
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
GRABANDO SESIÓN
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
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.
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
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)
Capítulo SQL PASS Venezuela Caracas Chapter
Líder: José G. Redondo López4 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
AGENDA
• Refactorización (Estandarizar, Probar y Refactorar)
• Índices & Estadísticas
• Demo
• Escenarios de Pruebas y Testeo
• Demo
• Aplicando refactorización T-SQL
• Demo
• Conclusiones
Escribiendo código T-SQL eficientemente
Refactorización (Estandarizar, Probar y Refactorar)
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”
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
Estandarizar Probar Refactorar
Antes de Refactorizar
Índices
&
Estadísticas
Índices & Estadísticas
Estadísticas
• Para que sirven?
• Para que las necesito?
• Analizándolas…
Como puedo ver las Estadísticas?
Estadísticas de la Clave Primaria
STAT_HEADER
DENSITY_VECTOR
HISTOGRAM
Estadísticas de Índices
No hay índice
So
lo u
no
Tam
bié
n v
ario
s
Estandarizar
Para que?
TABLAS ALIAS
• No utilizar alias
• Nombramientos de objetos
ambiguos
• Abreviaciones comunes
Ser consistente
PA
RA
MET
RO
S &
NO
MB
RE D
E
VA
RIA
BLES
Tipo de datos Esquema
Ser consistente
Uniones
• Es importante para la base de
datos?
• Y para nosotros es lo mismo?
Ser consistente
Apuesto a que vosotroshan visto
un tema en común
Ser consistente
DEMO
Escenarios de Pruebas y Testeo
PRUEBA TU ENTORNO SQL
PrecauciónP
rueb
a d
e d
esar
rollo
N
O E
S“E
scen
ario
de
Pro
du
cció
n”
Deb
emo
s pro
bar
PR
IMER
O“Escen
ario d
e Pro
du
cción
”
Aplicando refactorización T-SQL
Eliminar cosas inútiles
Removiendo uniones
Condiciones simples
Simplificando condiciones
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
Lógica ramificada
Condiciones simplificadas
Valores de Configuración
Obteniendo datos
Constantes embebidas
Constantes embebidasSELECT
*FROM
Person.PersonWHERE
PersonType = „EM‟AND
EmailPromotion = 0;
Constantes embebidasSELECT
*FROM
Person.PersonWHERE
PersonType = @PersonTypeAND
EmailPromotion = @EmailPromotion;
DEMO
El horror de encontrar código no apropiado
Funciones no apropiadas
Funciones no apropiadasUn ejemplo NO APROPIADO:
SELECT*
FROMTBL_CualquierTabla
WHEREDATEADD(yyyy, 4, DAT_Fechas) > GETDATE();
Funciones no apropiadasUn ejemplo APROPIADO:
SELECT*
FROMTBL_CualquierTabla
WHEREDAT_Fechas > DATEADD(yyyy, -4, GETDATE());
Subconsultas correlacionadas
SELECT DISTINCT c.LastName,c.FirstName,e.BusinessEntityID,(SELECT
BonusFROM
Sales.SalesPerson spWHERE
e.BusinessEntityID = sp.BusinessEntityID) AS Bonus
FROMPerson.Person AS c
JOINHumanResources.Employee AS e
ONe.BusinessEntityID = c.BusinessEntityID;
Un ejemplo
SELECT DISTINCT c.LastName,c.FirstName,e.BusinessEntityID,sp.Bonus
FROMPerson.Person AS c
JOINHumanResources.Employee AS e
ONe.BusinessEntityID = c.BusinessEntityID
JOIN Sales.SalesPerson AS sp
ON e.BusinessEntityID = sp.BusinessEntityID;
Otro ejemplo
Erradicar código repetido
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
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
DEMO
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
PREGUNTAS & RESPUESTAS
CONTACTO
Sitio web:
http://venezuela.sqlpass.org/
Facebook:
https://www.facebook.com/sqlpassvzla
Twitter:
https://twitter.com/sqlpassve
Los Invitamos al
Optimización de consultas utilizando estadísticasFecha: Martes, Julio 30 de 2013 - 12:30 Hora VenezuelaSpeaker: 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 datospara buscar la mejor manera de brindar resultados eficientes en nuestros sistemas debases de datos del día de hoy.
Próximo Webcast
Muchas gracias por su participación