Escribiendo código T-SQL eficientemente

64
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

description

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

Transcript of Escribiendo código T-SQL eficientemente

Page 1: Escribiendo código T-SQL eficientemente

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

Page 2: Escribiendo código T-SQL eficientemente

GRABANDO SESIÓN

Page 3: Escribiendo código T-SQL eficientemente

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

Page 4: Escribiendo código T-SQL eficientemente

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.

Page 5: Escribiendo código T-SQL eficientemente

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

Page 6: Escribiendo código T-SQL eficientemente

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)

Page 7: Escribiendo código T-SQL eficientemente

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

Page 8: Escribiendo código T-SQL eficientemente

AGENDA

• Refactorización (Estandarizar, Probar y Refactorar)

• Índices & Estadísticas

• Demo

• Escenarios de Pruebas y Testeo

• Demo

• Aplicando refactorización T-SQL

• Demo

• Conclusiones

Page 9: Escribiendo código T-SQL eficientemente

Escribiendo código T-SQL eficientemente

Page 10: Escribiendo código T-SQL eficientemente

Refactorización (Estandarizar, Probar y Refactorar)

Page 11: Escribiendo código T-SQL eficientemente

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”

Page 12: Escribiendo código T-SQL eficientemente

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

Page 13: Escribiendo código T-SQL eficientemente

Estandarizar Probar Refactorar

Antes de Refactorizar

Page 14: Escribiendo código T-SQL eficientemente

Índices

&

Estadísticas

Page 15: Escribiendo código T-SQL eficientemente

Índices & Estadísticas

Page 16: Escribiendo código T-SQL eficientemente

Estadísticas

• Para que sirven?

• Para que las necesito?

• Analizándolas…

Page 17: Escribiendo código T-SQL eficientemente

Como puedo ver las Estadísticas?

Page 18: Escribiendo código T-SQL eficientemente

Estadísticas de la Clave Primaria

STAT_HEADER

DENSITY_VECTOR

HISTOGRAM

Page 19: Escribiendo código T-SQL eficientemente

Estadísticas de Índices

Page 20: Escribiendo código T-SQL eficientemente

No hay índice

So

lo u

no

Tam

bié

n v

ario

s

Page 21: Escribiendo código T-SQL eficientemente

Estandarizar

Para que?

Page 22: Escribiendo código T-SQL eficientemente

TABLAS ALIAS

• No utilizar alias

• Nombramientos de objetos

ambiguos

• Abreviaciones comunes

Page 23: Escribiendo código T-SQL eficientemente

Ser consistente

Page 24: Escribiendo código T-SQL eficientemente

PA

RA

MET

RO

S &

NO

MB

RE D

E

VA

RIA

BLES

Tipo de datos Esquema

Page 25: Escribiendo código T-SQL eficientemente

Ser consistente

Page 26: Escribiendo código T-SQL eficientemente

Uniones

• Es importante para la base de

datos?

• Y para nosotros es lo mismo?

Page 27: Escribiendo código T-SQL eficientemente

Ser consistente

Page 28: Escribiendo código T-SQL eficientemente

Apuesto a que vosotroshan visto

un tema en común

Page 29: Escribiendo código T-SQL eficientemente

Ser consistente

Page 30: Escribiendo código T-SQL eficientemente

DEMO

Page 31: Escribiendo código T-SQL eficientemente

Escenarios de Pruebas y Testeo

Page 32: Escribiendo código T-SQL eficientemente

PRUEBA TU ENTORNO SQL

Page 33: Escribiendo código T-SQL eficientemente

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

Page 34: Escribiendo código T-SQL eficientemente

Aplicando refactorización T-SQL

Page 35: Escribiendo código T-SQL eficientemente

Eliminar cosas inútiles

Page 36: Escribiendo código T-SQL eficientemente

Removiendo uniones

Page 37: Escribiendo código T-SQL eficientemente

Condiciones simples

Page 38: Escribiendo código T-SQL eficientemente

Simplificando condiciones

Page 39: Escribiendo código T-SQL eficientemente

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

Page 40: Escribiendo código T-SQL eficientemente

Lógica ramificada

Page 41: Escribiendo código T-SQL eficientemente

Condiciones simplificadas

Page 42: Escribiendo código T-SQL eficientemente

Valores de Configuración

Page 43: Escribiendo código T-SQL eficientemente

Obteniendo datos

Page 44: Escribiendo código T-SQL eficientemente

Constantes embebidas

Page 45: Escribiendo código T-SQL eficientemente

Constantes embebidasSELECT

*FROM

Person.PersonWHERE

PersonType = „EM‟AND

EmailPromotion = 0;

Page 46: Escribiendo código T-SQL eficientemente

Constantes embebidasSELECT

*FROM

Person.PersonWHERE

PersonType = @PersonTypeAND

EmailPromotion = @EmailPromotion;

Page 47: Escribiendo código T-SQL eficientemente

DEMO

Page 48: Escribiendo código T-SQL eficientemente

El horror de encontrar código no apropiado

Page 49: Escribiendo código T-SQL eficientemente

Funciones no apropiadas

Page 50: Escribiendo código T-SQL eficientemente

Funciones no apropiadasUn ejemplo NO APROPIADO:

SELECT*

FROMTBL_CualquierTabla

WHEREDATEADD(yyyy, 4, DAT_Fechas) > GETDATE();

Page 51: Escribiendo código T-SQL eficientemente

Funciones no apropiadasUn ejemplo APROPIADO:

SELECT*

FROMTBL_CualquierTabla

WHEREDAT_Fechas > DATEADD(yyyy, -4, GETDATE());

Page 52: Escribiendo código T-SQL eficientemente

Subconsultas correlacionadas

Page 53: Escribiendo código T-SQL eficientemente

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

Page 54: Escribiendo código T-SQL eficientemente

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

Page 55: Escribiendo código T-SQL eficientemente

Erradicar código repetido

Page 56: Escribiendo código T-SQL eficientemente

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

Page 57: Escribiendo código T-SQL eficientemente

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

Page 58: Escribiendo código T-SQL eficientemente

DEMO

Page 59: Escribiendo código T-SQL eficientemente

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

Page 60: Escribiendo código T-SQL eficientemente

PREGUNTAS & RESPUESTAS

Page 61: Escribiendo código T-SQL eficientemente

CONTACTO

Sitio web:

http://venezuela.sqlpass.org/

Facebook:

https://www.facebook.com/sqlpassvzla

Twitter:

https://twitter.com/sqlpassve

Page 62: Escribiendo código T-SQL eficientemente

Los Invitamos al

Page 63: Escribiendo código T-SQL eficientemente

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

Page 64: Escribiendo código T-SQL eficientemente

Muchas gracias por su participación