Escribiendo código T-SQL eficientemente

Post on 02-Jul-2015

427 views 1 download

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

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