Sei sulla pagina 1di 21

Plataforma SaaS (software como servicio)

BUENAS PRACTICAS SQL

Alicante, Enero 2011

ndice

1.

Diseo de tablas

2.

Documentacin de tablas y procedimientos

3.

Filtros y Joins en Queries


1.

Filtros de claves primarias

2.

Bloqueos

3.

Consultas SARGABLES

4.

Cursores

5.

Tablas temporales vs. Variables tipo tabla

6.

Trabajo con conjuntos de datos y no registro a registro

7.

Transacciones atmicas

Diseo de tablas

Clave primaria autonumrico


ndice clustered

Campo obligatorio indicando cdigo de empresa


Ncompany varchar (5)
Crear indice por este campo

Defaults
DF_TABLA_CAMPO_Default

Indices
IX_TABLA_CAMPOS_INC_CAMPOSINCLUIDOS

Clave Privaria
PK_TABLA_CAMPOS

ndice

1.

Diseo de tablas

2.

Documentacin de tablas y procedimientos

3.

Filtros y Joins en Queries


1.

Filtros de claves primarias

2.

Bloqueos

3.

Consultas SARGABLES

4.

Cursores

5.

Tablas temporales vs. Variables tipo tabla

6.

Trabajo con conjuntos de datos y no registro a registro

7.

Transacciones atmicas

Documentacin de tablas y procedimientos

CABECERA DE CUALQUIER TABLA,PROCEDIMIENTO O TRIGGER


-- =============================================
-- NAME : Procedures or tables name
-- AUTOR : Creators name
-- CREATION : 07/05/2009
-- BBDD : Admin/Customer/Other
-- DESCRIPTION : Procedure or table description
-- PARAMETROS:
-- @p_ncliente :Companys code. ENTRADA
-- @p_tabla : table indentificator. ENTRADA
-- =============================================

Documentacin de tablas y procedimientos


TABLAS
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'Contains audit records of some application events' ,
@level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'TABLE',@level1name=N'AUDITORIA

CAMPOS DE LAS TABLAS


EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'Company code of the record' ,
@level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'TABLE',@level1name=N'AUDITORIA',

Documentacin de tablas y procedimientos

PROCEDIMIENTOS ALMACENADOS
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'Get invoice number, invoice amount and invoice discount' ,
@level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'PROCEDURE',@level1name=N'GetInvoiceValues

PARAMETROS DE LOS PROCEDIMIENTOS ALMACENADOS (incluidos los de


salida)
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'Company code' ,
@level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'PROCEDURE',@level1name=N'GetInvoiceValues',
@level2type=N'PARAMETER',@level2name=N'@Ccode'

ndice

1.

Diseo de tablas

2.

Documentacin de tablas y procedimientos

3.

Filtros y Joins en Queries


1.

Filtros de claves primarias

2.

Bloqueos

3.

Consultas SARGABLES

4.

Cursores

5.

Tablas temporales vs. Variables tipo tabla

6.

Trabajo con conjuntos de datos y no registro a registro

7.

Transacciones atmicas

Filtros y Joins en Queries

Legibilidad: Utilizar Inner, outer, left


select campo1,campo 2 from articulos a with(nolock)
inner join almacenar al with(nolock) on a.referencia=al.articulo and
like @nempresa+%
where a.referencia like @nempresa +%

al.articulo

Reducir: Siempre filtrar clave primaria LIKE NEMPRESA%


SI : where nfactura like session(ncliente) + % and fecha
NO: where nfactura=00012FC09009876 and nfactura like session(ncliente) +%

Bloqueos: Table hints


WITH (NOLOCK) Select (incluidos los que buscan dentro de updates y deletes)
WITH(UPDLOCK) Updates (tabla que se va a actualizar)
WITH(ROWLOCK) Deletes (tabla cuyas filas se van a borrar)

Filtros y Joins en Queries


Sargables (Search ARGument Able):
Permiten cachear el plan de mantenimiento de la consulta.
No recompila cdigo Mejora estadsticas
Uso ndices efectivo. (index seeks, not covering indexes)

Operadores
Sargable operators: =,>,<,>=,<=,BETWEEN,LIKE without leading %
Non-sargable operators: <>,IN,OR,NOT IN, NOT EXISTS, NOT LIKE, LIKE with leading
%

NO UTILIZAR IN, NOT IN y NOT EXISTS asociados a consultas pero si a


valores constantes:

SI: and familia NOT IN ( 00012F1,00012F2,00012F3)


NO:and familia NOT IN (select codigo from familias..)

10

Filtros y Joins en Queries


Funciones en Queries
Se desaconseja su uso (Siempre que sea posible)
Si un parmetro es un campo variable se inhabilita el uso de ndices.
Ejemplos:
NO: WHERE SUBSTRING(nombre,1,1) = m
: WHERE
like m%
SI
NO:
WHEREnombre
SUBSTRING(nombre,1,1)
= m

SI : WHERE nombre like m%

NO: WHERE DATEDIFF(yy,falta,GETDATE()) > 21

NO: WHERE DATEDIFF(yy,falta,GETDATE()) > 21


SI:
SI:WHERE
WHEREfalta
falta< <DATEADD(yy,-21,GETDATE())
DATEADD(yy,-21,GETDATE())

11

ndice

1.

Diseo de tablas

2.

Documentacin de tablas y procedimientos

3.

Filtros y Joins en Queries


1.

Filtros de claves primarias

2.

Bloqueos

3.

Consultas SARGABLES

4.

Cursores

5.

Tablas temporales vs. Variables tipo tabla

6.

Trabajo con conjuntos de datos y no registro a registro

7.

Transacciones atmicas

12

Cursores

Mejor cursor el que no se usa.


SOLO en caso de ejecutar procedimientos en distintas BBDD
Alternativas

Usar bucles WHILE (No conectado)


Usar variables de tipo tabla (<50 filas)
Usar tablas temporales
Usar tablas derivadas
Usar Sub-Consultas
Usar CTEs (With (querie) tmp;)
Desarrollar varias consultas. (Divide y vencers. Perdida de rendimiento al mezclar ms
de 5 tablas en una querie.)

13

ndice

1.

Diseo de tablas

2.

Documentacin de tablas y procedimientos

3.

Filtros y Joins en Queries


1.

Filtros de claves primarias

2.

Bloqueos

3.

Consultas SARGABLES

4.

Cursores

5.

Tablas temporales vs. Variables tipo tabla

6.

Trabajo con conjuntos de datos y no registro a registro

7.

Transacciones atmicas

14

Tablas temporales vs. Variables tipo tabla

Tabla Variable

Declare @table as (campo tipo..)


Ventajas
Ms rpidas con pocas filas
Se ejecutan en memoria
No necesitamos eliminarlas
Desventajas
No permite ndices.
No utilizar cuando incluyen ms de 50 filas
No utiliza planes de ejecucin cacheados

15

Tablas temporales vs. Variables tipo tabla

Tabla temporal
Create table #table (campo tipo,)
Ventajas

Permite ndices
Permite vistas
Se borrar al finalizar el bach de ejecucin
Se pueden utilizar en consultas dinmicas

Desventajas
Escritura en disco. No en memoria
Carga de base de datos tempdb
Mas lentas que las variables

16

ndice

1.

Diseo de tablas

2.

Documentacin de tablas y procedimientos

3.

Filtros y Joins en Queries


1.

Filtros de claves primarias

2.

Bloqueos

3.

Consultas SARGABLES

4.

Cursores

5.

Tablas temporales vs. Variables tipo tabla

6.

Trabajo con conjuntos de datos y no registro a registro

7.

Transacciones atmicas

17

Trabajo con conjuntos de datos y no por registros

SQL Server es una herramienta DDBB orientada al uso de


conjuntos.
Menor consumo de recursos.
Si se deben realizar varias inserciones combinar todas en un nico
insert por tabla. (Reducimos bloqueos)
Utilizacin optima de estadsticas y planes de cach.

18

ndice

1.

Diseo de tablas

2.

Documentacin de tablas y procedimientos

3.

Filtros y Joins en Queries


1.

Filtros de claves primarias

2.

Bloqueos

3.

Consultas SARGABLES

4.

Cursores

5.

Tablas temporales vs. Variables tipo tabla

6.

Trabajo con conjuntos de datos y no registro a registro

7.

Transacciones atmicas

19

Transacciones atmicas

Usar transacciones siempre


Begin Try
Begin tran
Inserciones updates y deletes
Commit tran
End try
Begin catch
rollback tran
devolucin de errores
End catch

Evitan inconsistencia de datos en caso de error.


Aseguran la insercin de todos los datos.
Evitan lecturas sucias (datos incorrectos a mitad de la transaccin

20

21