248
Programación en SQL Server 2000

BHPTraining SQLServer2000 Programadores 2

Embed Size (px)

DESCRIPTION

BHP Training SQL Server 2000 Programadores

Citation preview

Page 1: BHPTraining SQLServer2000 Programadores 2

Programación en SQL Server 2000

Page 2: BHPTraining SQLServer2000 Programadores 2

Recibiendo Datos

Page 3: BHPTraining SQLServer2000 Programadores 2

Introducción• Recibiendo Datos usando la sentencia SELECT• Filtrando Datos• Formateando un Set de Resultados• Cómo son procesadas las consultas• Consideraciones de rendimiento

Recibiendo Datos

Page 4: BHPTraining SQLServer2000 Programadores 2

Recibiendo Datos usando la sentencia SELECT• Uso de la sentencia SELECT• Especificación de Columnas• Usando la cláusula WHERE para especificar Filas.

Recibiendo Datos

Page 5: BHPTraining SQLServer2000 Programadores 2

SELECT [ALL | DISTINCT] <select_list> FROM {<table_source>} [,…n] WHERE <search_condition>

Sintaxis Parcial

Usando la sentencia SELECT• SELECT lista las columnas especificadas• La cláusula WHERE especifica la restricción a nivel de

filas• La cláusula FROM especifica el origen de datos

(Tabla)

Recibiendo Datos

Page 6: BHPTraining SQLServer2000 Programadores 2

Especificando Columnas

employeeid lastname firstname title

1 Davolio Nancy Sales Representative

2 Fuller Andrew Vice President, Sales

3 Leverling Janet Sales Representative

4 Peacock Margaret Sales Representative

5 Buchanan Steven Sales Manager

6 Suyama Michael Sales Representative

7 King Robert Sales Representative

8 Callahan Laura Inside Sales Coordinator

9 Dodsworth Anne Sales Representative

USE northwindSELECT employeeid, lastname, firstname, titleFROM employeesGO

Recibiendo Datos

Page 7: BHPTraining SQLServer2000 Programadores 2

Usando la cláusula WHERE para especificar filas

employeeid lastname firstname title

5 Buchanan Steven Sales Manager

USE northwindSELECT employeeid, lastname, firstname, titleFROM employeesWHERE employeeid = 5GO

Recibiendo Datos

Page 8: BHPTraining SQLServer2000 Programadores 2

Filtrando Datos• Usando operadores de comparación• Usando String de comparación• Usando operadores lógicos• Recibiendo un rango de valores• Usando una lista de valores como criterio de

busqueda• Recibiendo valores desconocidos

Recibiendo Datos

Page 9: BHPTraining SQLServer2000 Programadores 2

Usando operadores de comparaciónUSE northwindSELECT lastname, cityFROM employeesWHERE country = 'USA'

GO

lastname city

Davolio SeattleFuller TacomaLeverling KirklandPeacock RedmondCallahan Seattle

Ejemplo 1

Recibiendo Datos

Page 10: BHPTraining SQLServer2000 Programadores 2

Usando String de comparación

USE northwindSELECT companynameFROM customersWHERE companyname LIKE '%Restaurant%'GO

companyname

GROSELLA-Restaurante

Lonesome Pine Restaurant

Tortuga Restaurante

Recibiendo Datos

Page 11: BHPTraining SQLServer2000 Programadores 2

Usando comparadores lógicos

USE northwindSELECT productid, productname, supplierid, unitprice FROM products WHERE (productname LIKE 'T%' OR productid = 46) AND (unitprice > 16.00) GO

productid productname supplierid unitprice

14 Tofu 6 23.25

29 Thüringer Rostbratwurst 12 123.79

62 Tarte au sucre 29 49.3

Ejemplo 1

Recibiendo Datos

Page 12: BHPTraining SQLServer2000 Programadores 2

Recibiendo un rango de valores

USE northwindSELECT productname, unitpriceFROM productsWHERE unitprice BETWEEN 10 AND 20GO

productname unitprice

Chai 18

Chang 19

Aniseed Syrup 10

Genen Shouyu 15.5

Pavlova 17.45

Sir Rodney’s Scones 10

… …

Ejemplo 1

Recibiendo Datos

Page 13: BHPTraining SQLServer2000 Programadores 2

USE northwindSELECT companyname, countryFROM suppliersWHERE country IN ('Japan', 'Italy')

GO

Usando una lista de valores como criterio de busqueda

companyname country

Tokyo Traders Japan

Mayumi’s Japan

Formaggi Fortini s.r.l. Italy

Pasta Buttini s.r.l. Italy

Ejemplo 1

Recibiendo Datos

Page 14: BHPTraining SQLServer2000 Programadores 2

Recibiendo valores desconocidosUSE northwindSELECT companyname, faxFROM suppliersWHERE fax IS NULLGO

companyname fax

Exotic Liquids NULL

New Orleans Cajun Delights NULL

Tokyo Traders NULL

Cooperativa de Quesos ‘Las Cabras’ NULL

… …

Recibiendo Datos

Page 15: BHPTraining SQLServer2000 Programadores 2

Formateando el resultado• Ordenando los datos• Eliminando filas duplicadas• Cambiando nombres de las columnas• Usando literales

Recibiendo Datos

Page 16: BHPTraining SQLServer2000 Programadores 2

Ordenando DatosUSE northwindSELECT productid, productname, categoryid, unitprice FROM products ORDER BY categoryid, unitprice DESCGO

productid productname categoryid unitprice

38 Cote de Blaye 1 263.5000

43 Ipoh Coffee 1 46.0000

2 Chang 1 19.0000

… … … …

63 Vegie-spread 2 43.9000

8 Northwoods Cranberry Sauce 2 40.0000

61 Sirop d'érable 2 28.5000

… … … …

Ejemplo 1

Recibiendo Datos

Page 17: BHPTraining SQLServer2000 Programadores 2

Eliminando Filas duplicadas

USE northwindSELECT DISTINCT country FROM suppliers ORDER BY countryGO

country

Australia

Brazil

Canada

Denmark

Finland

France

Germany

Italy

Japan

Netherlands

Norway

Singapore

Spain

Sweden

UK

USA

Example 1

Recibiendo Datos

Page 18: BHPTraining SQLServer2000 Programadores 2

Cambiando nombres de las columnasUSE northwindSELECT firstname AS First, lastname AS Last

,employeeid AS 'Employee ID:' FROM employeesGO

First Last Employee ID:

Nancy Davolio 1

Andrew Fuller 2

Janet Leverling 3

Margaret Peacock 4

Steven Buchanan 5

Michael Suyama 6

Robert King 7

Laura Callahan 8

Anne Dodsworth 9

Recibiendo Datos

Page 19: BHPTraining SQLServer2000 Programadores 2

Usando literalesUSE northwindSELECT firstname, lastname

,'Identification number:', employeeidFROM employeesGO

First Last Employee ID:

Nancy Davolio Identification Number: 1

Andrew Fuller

Janet Leverling

Margaret Peacock

Steven Buchanan

Michael Suyama

Robert King

Laura Callahan

Anne Dodsworth

Identification Number: 2

Identification Number: 3

Identification Number: 4

Identification Number: 5

Identification Number: 6

Identification Number: 7

Identification Number: 8

Identification Number: 9

Recibiendo Datos

Page 20: BHPTraining SQLServer2000 Programadores 2

Cómo son procesadas las consultasUncached Queries (Ad Hoc)

Cached Queries

ExecuteCompileOptimizeResolveParse

First Execution

ExecuteCompileOptimizeResolveParse

Subsequent Execution ExecuteProcedure

Cache

Recibiendo Datos

Page 21: BHPTraining SQLServer2000 Programadores 2

Cómo son “cacheadas” automáticamente las consultas

USE northwindSELECT * FROM products WHERE unitprice = $12.5SELECT * FROM products WHERE unitprice = 12.5SELECT * FROM products WHERE unitprice = $12.5GO

USE librarySELECT * FROM member WHERE member_no = 7890SELECT * FROM member WHERE member_no = 1234SELECT * FROM member WHERE member_no = 7890GO

Ad Hoc Batches

Auto-Parameterization

Recibiendo Datos

Page 22: BHPTraining SQLServer2000 Programadores 2

Consideraciones de Rendimiento• Las consultas sin ser específicas van a ser mas lentas.

Full Scan.• Busquedas LIKE relentizan la recuperación• Coincidencias exactas o rangos mejoran velocidad de

recuperación de datos Cláusula ORDER BY puede ralentizar la recuperación de datos

Recibiendo Datos

Page 23: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Usar la cláusula DISTINCT para eliminar las filas duplicadas en los resultados

Mejorar la legibilidad de los resultados por cambio de nombres de columna o mediante literales

En la línea multi-columna, coloque una coma antes de la Nombres de columna, con excepción de la primera columna

Recibiendo Datos

Page 24: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Recibiendo Datos

Page 25: BHPTraining SQLServer2000 Programadores 2

Repaso• Obtener datos usando la setencia SELECT• Filtrando Datos• Formateando un set de resultados• Cómo se procesar las consultas• Consideraciones de Rendimiento

Recibiendo Datos

Page 26: BHPTraining SQLServer2000 Programadores 2

Agrupando y sumarizando datos

Page 27: BHPTraining SQLServer2000 Programadores 2

Introducción• TOP n• Usando funciones de agregación• GROUP BY• Generando valores agregados en los

resultados• Usando cláusulas COMPUTE y COMPUTE BY

Agrupando y sumarizando datos

Page 28: BHPTraining SQLServer2000 Programadores 2

TOP n• Lista sólo las primeras n filas• Especifica el rango de valores en las cláusula

ORDER BY• Returns Ties if WITH TIES Is Used

USE northwindSELECT TOP 5 orderid, productid, quantity FROM [order details] ORDER BY quantity DESCGO

USE northwindSELECT TOP 5 WITH TIES orderid, productid, quantity FROM [order details] ORDER BY quantity DESCGO

Ejemplo 1

Ejemplo 2

Agrupando y sumarizando datos

Page 29: BHPTraining SQLServer2000 Programadores 2

Usando funciones de agrupaciónFunción Agrupación Descripción

AVG Average of values in a numeric expression

COUNT Number of values in an expression

COUNT (*) Number of selected rows

MAX Highest value in the expression

MIN Lowest value in the expression

SUM Total values in a numeric expression

STDEV Statistical deviation of all values

STDEVP Statistical deviation for the population

VAR Statistical variance of all values

VARP Statistical variance of all values for the population

Agrupando y sumarizando datos

Page 30: BHPTraining SQLServer2000 Programadores 2

Usando funciones agregadas con valores Null• Las funciones de agregación ignoran los valores null• COUNT(*) cuenta las filas con valores null

USE northwindSELECT COUNT (*) FROM employeesGO

USE northwindSELECT COUNT(reportsto) FROM employeesGO

Ejemplo 1

Ejemplo 2

Agrupando y sumarizando datos

Page 31: BHPTraining SQLServer2000 Programadores 2

GROUP BY• Usando la cláusula GROUP BY• Usando la cláusula GROUP BY con HAVING

Agrupando y sumarizando datos

Page 32: BHPTraining SQLServer2000 Programadores 2

USE northwindSELECT productid ,SUM(quantity) AS total_quantity FROM orderhist WHERE productid = 2 GROUP BY productidGO

Usando la cláusula GROUP BYUSE northwindSELECT productid, orderid ,quantity FROM orderhistGO

USE northwindSELECT productid ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productidGO

productid total_quantity

1 15

2 35

3 45

productid orderid quantity

1 1 5

1 1 10

2 1 10

2 2 25

3 1 15

3 2 30

productid total_quantity

2 35

Sólo las filas que satisfacen la cláusula WHERE

Agrupando y sumarizando datos

Page 33: BHPTraining SQLServer2000 Programadores 2

Usando la cláusula GROUP BY con HAVING

USE northwindSELECT productid, orderid ,quantity FROM orderhistGO

USE northwindSELECT productid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid HAVING SUM(quantity)>=30GO

productid total_quantity

2 35

3 45

productid orderid quantity

1 1 5

1 1 10

2 1 10

2 2 25

3 1 15

3 2 30

Agrupando y sumarizando datos

Page 34: BHPTraining SQLServer2000 Programadores 2

Generando valores agrupados en los resultados• Usando GROUP By con el operador ROLLUP• Usando GROUP By con el operador CUBE• Usando la función GROUPING

Agrupando y sumarizando datos

Page 35: BHPTraining SQLServer2000 Programadores 2

Usando GROUP By con el operador ROLLUPUSE northwindSELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH ROLLUP ORDER BY productid, orderidGO

productid orderid total_quantity

NULL NULL 95

1 NULL 15

1 1 5

1 2 10

2 NULL 35

2 1 10

2 2 25

3 NULL 45

3 1 15

3 2 30

Grand total

Summarizes only rows for productid 1

Detail value for productid 1, orderid 1

Detail value for productid 1, orderid 2

Summarizes only rows for productid 2

Detail value for productid 2, orderid 1

Summarizes only rows for productid 3

Detail value for productid 3, orderid 1

Detail value for productid 3, orderid 2

Agrupando y sumarizando datos

Page 36: BHPTraining SQLServer2000 Programadores 2

Usando GROUP By con el operador CUBE

El operador CUBE produce dos resumenes más de valores que el operador ROLLUP

USE northwindSELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderidGO

Descripción

Grand total

Summarizes all rows for orderid 1

Summarizes all rows for orderid 2

Summarizes only rows for productid 1

Detail value for productid 1, orderid 1

Detail value for productid 1, orderid 2

Summarizes only rows for productid 2

Detail value for productid 2, orderid 1

Detail value for productid 2, orderid 2

Summarizes only rows for productid 3

Detail value for productid 3, orderid 1

Detail value for productid 3, orderid 2

productid orderid total_quantity

NULL NULL 95

NULL 1 30

NULL 2 65

1 NULL 15

1 1 5

1 2 10

2 NULL 35

2 1 10

2 2 25

3 NULL 45

3 1 15

3 2 30

Agrupando y sumarizando datos

Page 37: BHPTraining SQLServer2000 Programadores 2

1 represents summary values in the preceding column

0 represents detail values in the preceding column

95

30

65

15

5

10

35

10

25

45

15

30

Usando la función GROUPING

SELECT productid, GROUPING (productid) ,orderid, GROUPING (orderid) ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderidGO

productidNULL

NULL

NULL

1

1

1

2

2

2

3

3

3

1

1

1

0

0

0

0

0

0

0

0

0

orderidNULL

1

2

NULL

1

2

NULL

1

2

NULL

1

2

1

0

0

1

0

0

1

0

0

1

0

0

total_quantity

Agrupando y sumarizando datos

Page 38: BHPTraining SQLServer2000 Programadores 2

COMPUTE BY

COMPUTEUSE northwindSELECT productid, orderid, quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity) BY productid COMPUTE SUM(quantity)GO

USE northwindSELECT productid, orderid ,quantity FROM orderhistORDER BY productid, orderidCOMPUTE SUM(quantity)GO

productid orderid quantity

1 1 5

1 2 10

2 1 10

2 2 25

3 1 15

3 2 30

sum 95

productid orderid quantity

1 1 5

1 2 10

sum 15

2 1 10

2 2 25

sum 35

3 1 15

3 2 30

sum 45

sum 95

Usando la función GROUPING

Agrupando y sumarizando datos

Page 39: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Indexar con frecuencia las columnas agregadas

Evite el uso de funciones agregadas con valores nulos

Utilice la cláusula ORDER BY para garantizar un orden

Utilice el operador ROLLUP con la cláusula CUBE

Agrupando y sumarizando datos

Page 40: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Agrupando y sumarizando datos

Page 41: BHPTraining SQLServer2000 Programadores 2

Revisión• TOP n• Usando funciones de agregación• Fundamentos de GROUP BY• Generar valores de agregación en los resultados• Usando la cláusula COMPUTE y COMPUTE BY

Agrupando y sumarizando datos

Page 42: BHPTraining SQLServer2000 Programadores 2

Uniendo multiples tablas

Page 43: BHPTraining SQLServer2000 Programadores 2

Introducción• Usando Alias para nombrar tablas• Combinando datos de múltiples tablas• Combinando múltiples resultados

Uniendo múltiples tablas

Page 44: BHPTraining SQLServer2000 Programadores 2

Usando Alias para nombrar tablas

• Ejemplo 1 (sin alias)

• Ejemplo 2 (con alias)USE joindbSELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s ON b.buyer_id = s.buyer_idGO

USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_idGO

Uniendo múltiples tablas

Page 45: BHPTraining SQLServer2000 Programadores 2

Combinando datos de múltiples tablas• Introducción a los JOIN• Inner Joins• Outer Joins• Cross Joins• Join con más de dos tablas• Join de una tabla con ella misma

Uniendo múltiples tablas

Page 46: BHPTraining SQLServer2000 Programadores 2

Introducción a los Join• Seleccionar columnas especificas de multiples

tablas– La palabra JOIN especifica que tablas estan en

reunion y como se reunen– La palabra ON especifica la condición de reunión

• Consulta dos o más tablas para generar un resultado– Usar PK y FK como condición de la reunión– Usar columnas en común durante la reunión

Uniendo múltiples tablas

Page 47: BHPTraining SQLServer2000 Programadores 2

USE joindbSELECT buyer_name, sales.buyer_id, qtyFROM buyers INNER JOIN salesON buyers.buyer_id = sales.buyer_idGO

sales

buyer_id prod_id qty

1

1

4

3

2

3

1

5

15

5

37

11

4 2 1003

buyers

buyer_name

Adam Barr

Sean Chai

Eva Corets

Erin O’Melia

buyer_id

1

2

3

4

Result

buyer_name

Adam Barr

Adam Barr

Erin O’Melia

Eva Corets

buyer_id qty

1

1

4

3

15

5

37

11

Erin O’Melia 4 1003

Ejemplo 1

Usando Join

Uniendo múltiples tablas

Page 48: BHPTraining SQLServer2000 Programadores 2

USE joindbSELECT buyer_name, sales.buyer_id, qty FROM buyers LEFT OUTER JOIN sales ON buyers.buyer_id = sales.buyer_idGO

sales

buyer_id prod_id qty

1

1

4

3

2

3

1

5

15

5

37

11

4 2 1003

buyers

buyer_name

Adam Barr

Sean Chai

Eva Corets

Erin O’Melia

buyer_id

1

2

3

4Resultado

buyer_name

Adam Barr

Adam Barr

Erin O’Melia

Eva Corets

buyer_id qty

1

1

4

3

15

5

37

11

Erin O’Melia 4 1003

Sean Chai NULL NULL

Ejemplo 1

Usando Outer Joins

Uniendo múltiples tablas

Page 49: BHPTraining SQLServer2000 Programadores 2

USE joindbSELECT buyer_name, qty FROM buyers CROSS JOIN salesGO

Resultado

buyer_name

Adam Barr

Adam Barr

Adam Barr

Adam Barr

qty

15

5

37

11

Adam Barr 1003

Sean Chai 15

Sean Chai 5

Sean Chai 37

Sean Chai 11

Sean Chai 1003

Eva Corets 15... ...

sales

buyer_id prod_id qty

1

1

4

3

2

3

1

5

15

5

37

11

4 2 1003

buyers

buyer_id

1

2

3

4

buyer_name

Adam Barr

Sean Chai

Eva Corets

Erin O’Melia

Ejemplo 1

Usando Cross Joins

Uniendo múltiples tablas

Page 50: BHPTraining SQLServer2000 Programadores 2

Reuniendo más de dos TablasSELECT buyer_name, prod_name, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id INNER JOIN produce ON sales.prod_id = produce.prod_idGO

produce

prod_id prod_name

1

2

3

4

Apples

Pears

Oranges

Bananas

5 Peaches

buyers

buyer_id

1

2

3

4

buyer_name

Adam Barr

Sean Chai

Eva Corets

Erin O’Melia

sales

buyer_id

1

1

3

4

prod_id

2

3

1

5

2 2

qty

15

5

37

11

1003

Result

buyer_name

Erin O’Melia

Adam Barr

Erin O’Melia

Adam Barr

Eva Corets

prod_name

Apples

Pears

Pears

Oranges

Peaches

qty

37

15

1003

5

11

Ejemplo 1

Uniendo múltiples tablas

Page 51: BHPTraining SQLServer2000 Programadores 2

Reuniendo una tabla con ella mismaUSE joindbSELECT a.buyer_id AS buyer1, a.prod_id ,b.buyer_id AS buyer2 FROM sales AS a JOIN sales AS b ON a.prod_id = b.prod_idWHERE a.buyer_id > b.buyer_idGO

sales b

buyer_id prod_id qty

1

1

4

3

2

3

1

5

15

5

37

11

4 2 1003

sales a

buyer_id prod_id qty

1

1

4

3

2

3

1

5

15

5

37

11

4 2 1003

Result

buyer1

4

prod_id buyer2

2 1

Ejemplo 3

Uniendo múltiples tablas

Page 52: BHPTraining SQLServer2000 Programadores 2

Combinando múltiples resultados• Use el operador UNION para crear resultados

de multiples consultas• Para cada consulta Ud. debería:

– Trabajar con tipos de datos similares– Trabajar con el mismo nro de columnas – Trabajar con el mismo orden de columnas

en las columnas seleccionadas

USE northwindSELECT (firstname + ' ' + lastname) AS name ,city, postalcode FROM employeesUNIONSELECT companyname, city, postalcode FROM customersGO

Uniendo múltiples tablas

Page 53: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Reunir tablas utilizando la PK y las FK

Referenciar todas las columnas que componene la PK en la cláusula ON cuando la clave es compuesta

Limitar el nro de tablas en un JOIN

Uniendo múltiples tablas

Page 54: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Uniendo múltiples tablas

Page 55: BHPTraining SQLServer2000 Programadores 2

Repaso• Usar Alias para los nombres de las tablas• Combinando datos de multiples tablas• Combinando múltiples resultados

Uniendo múltiples tablas

Page 56: BHPTraining SQLServer2000 Programadores 2

Trabajando con Subconsultas

Page 57: BHPTraining SQLServer2000 Programadores 2

Introducción• Introducción a subconsultas• Usando una subconsulta como una tablas derivada• Usando una subconsulta como una expresión• Usando una subconsulta para datos correlativos• Usando EXISTS y NOT EXISTS

Trabajando con Subconsultas

Page 58: BHPTraining SQLServer2000 Programadores 2

Introducción a subconsultas• Porque usar subconsultas

– Para disminuir lo complejo de una consulta y dividirla en una serie lógica de pasos

– Para responder a una consulta que se basa en los resultados de otra consulta

• Porque usar Joins en lugar de subconsultas– SQL Server executa mas rápido los JOIN

que las subconsultas• Cómo usar subconsultas

Trabajando con SubconsultasTrabajando con Subconsultas

Page 59: BHPTraining SQLServer2000 Programadores 2

Usando una subconsulta como una tablas derivada

• Es un set de resultados en una consulta que funciona como una tabla

• Toma el lugar de una tabla en la cláusula FROM

• Esta optimizado con el resto de la consulta

USE northwindSELECT T.orderid, T.customerid FROM ( SELECT orderid, customerid FROM orders ) AS TGO

Trabajando con SubconsultasTrabajando con Subconsultas

Page 60: BHPTraining SQLServer2000 Programadores 2

Usando una subconsulta como una expresión• Es evaluada y tratada como una expresión • Es ejecutada junto con la consulta principal

USE pubsSELECT title, price ,( SELECT AVG(price) FROM titles) AS average ,price-(SELECT AVG(price) FROM titles) AS difference FROM titles WHERE type='popular_comp'GO

Trabajando con SubconsultasTrabajando con Subconsultas

Page 61: BHPTraining SQLServer2000 Programadores 2

Usando una subconsulta para datos correlativos• Evaluando subconsultas correlativas• Imitando una cláusula JOIN• Imitando una cláusula HAVING

Trabajando con SubconsultasTrabajando con Subconsultas

Page 62: BHPTraining SQLServer2000 Programadores 2

Evaluando una consulta correlativa

Back to Step 1

USE northwindSELECT orderid, customerid FROM orders AS or1 WHERE 20 < (SELECT quantity FROM [order details] AS od WHERE or1.orderid = od.orderid AND od.productid = 23)GO

La consulta externa pasa los valores de columna a la consulta interna

La consulta utiliza este valor para satisfacer la consulta interna

La consulta devuelve un valor a la consulta externa

El proceso se repite para la siguiente fila de la consulta externa

Ejemplo 1

Trabajando con SubconsultasTrabajando con Subconsultas

Page 63: BHPTraining SQLServer2000 Programadores 2

Imitando una cláusula JOIN• Las subconsultas correlacionadas pueden producir el

mismo resultado que una cláusula JOIN• Deja al optimizador de consultas para determinar

cómo se correlacionan los datos de manera más eficiente

USE pubsSELECT DISTINCT t1.type FROM titles AS t1 WHERE t1.type IN (SELECT t2.type FROM titles AS t2 WHERE t1.pub_id <> t2.pub_id)GO

Ejemplo 1

Trabajando con SubconsultasTrabajando con Subconsultas

Page 64: BHPTraining SQLServer2000 Programadores 2

Imitando una cláusula HAVING• Subconsulta con el mismo resultado que una

cláusula HAVING

• Usando la cláusula HAVING sin una subconsulta

USE pubsSELECT t1.type, t1.title, t1.price FROM titles AS t1 WHERE t1.price > ( SELECT AVG(t2.price) FROM titles AS t2 WHERE t1.type = t2.type )GO

USE pubsSELECT t1.type, t1.title, t1.price FROM titles AS t1 INNER JOIN titles AS t2 ON t1.type = t2.type GROUP BY t1.type, t1.title, t1.price HAVING t1.price > AVG(t2.price)GO

Ejemplo 1

Ejemplo 2

Trabajando con SubconsultasTrabajando con Subconsultas

Page 65: BHPTraining SQLServer2000 Programadores 2

Usando EXISTS y NOT EXISTS• Usar con Subconsultas correlacionadas• Determinar si existen datos en una lista de

valores del Proceso de SQL Server– La consulta externa prueba la existencia de filas– La consulta interior devuelve TRUE o FALSE

USE northwindSELECT lastname, employeeid FROM employees AS e WHERE EXISTS (SELECT * FROM orders AS o WHERE e.employeeid = o.employeeid AND o.orderdate = '9/5/97')GO

Ejemplo 1

Trabajando con SubconsultasTrabajando con Subconsultas

Page 66: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Utilice subconsultas para romper una compleja consulta

Utilice alias para las tablas en las Subconsultas correlacionadas

Utilice el comando INSERT…SELECT Para añadir filas de otras fuentes a una tabla existente

Utilice el operador EXISTS en lugar del operador IN

Trabajando con SubconsultasTrabajando con Subconsultas

Page 67: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Trabajando con SubconsultasTrabajando con Subconsultas

Page 68: BHPTraining SQLServer2000 Programadores 2

Repaso• Introducción a las subconsultas• Usando una subconsulta como una tabla derivada• Usando una subconsulta como una expresion• Usando una subconsulta con datos correlativos• Usando cláusulas EXISTS y NOT EXISTS

Trabajando con SubconsultasTrabajando con Subconsultas

Page 69: BHPTraining SQLServer2000 Programadores 2

Modificando Datos

Page 70: BHPTraining SQLServer2000 Programadores 2

Introducción• Usando Transacciones• Insertando Datos• Borrando Datos• Actualizando Datos• Consideraciones de rendimiento

Modificando Datos

Page 71: BHPTraining SQLServer2000 Programadores 2

Usando Transacciones• Comienzo de

Transacciones– Explícitas– Autocommit– Implícitas

• Final de la Transacción– COMMIT– ROLLBACK

BEGIN TRANSACTION UPDATE savings . . . UPDATE checking . . .COMMIT TRANSACTION

Modificando DatosModificando Datos

Page 72: BHPTraining SQLServer2000 Programadores 2

Insertando Datos• Insertando una fila de datos por valor• Usando sentencias INSERT…SELECT• Creación de una tabla usando la sentencia SELECT

INTO• Insertando Datos parciales• Insertando datos utilizando columnas por defecto

Modificando DatosModificando Datos

Page 73: BHPTraining SQLServer2000 Programadores 2

Insertando una fila de datos por valor• Se debe tener en cuenta las restricciones de destino

o la sentencia INSERT falla• Usar una lista de columnas para especificar columnas

de destino• Especificar una correspondencia en la lista de valores

USE northwindINSERT customers

(customerid, companyname, contactname, contacttitle ,address, city, region, postalcode, country, phone ,fax)

VALUES ('PECOF', 'Pecos Coffee Company', 'Michael Dunn' ,'Owner', '1900 Oak Street', 'Vancouver', 'BC' ,'V3F 2K1', 'Canada', '(604) 555-3392' ,'(604) 555-7293')

GO

Modificando DatosModificando Datos

Page 74: BHPTraining SQLServer2000 Programadores 2

USE northwindINSERT customers SELECT substring(firstname, 1, 3) + substring (lastname, 1, 2) ,lastname, firstname, title, address, city ,region, postalcode, country, homephone, NULL FROM employeesGO

Usando la sentencia INSERT…SELECT• Todas las filas que satisfacen la sentencia SELECT son

insertadas• Verificar que la tablas que recibe nuevas filas exista• Asegurarse que los tipos de datos sea compatibles• Determinar la existencia de valores por defecto o

que la columna permita valores Null

Modificando DatosModificando Datos

Page 75: BHPTraining SQLServer2000 Programadores 2

Creación de tablas usando la sentencia SELECT INTO• Se usa para crear una tabla con sus datos a traves

de una sentencia simple• Crear una tabla local o global en forma temporal• Crear alias a las columnas o especificar nombres de

las columnas para la nueva tablaUSE northwindSELECT productname AS products ,unitprice AS price ,(unitprice * 1.1) AS tax INTO #pricetable FROM productsGO

Modificando DatosModificando Datos

Page 76: BHPTraining SQLServer2000 Programadores 2

Insertando Datos Parciales

USE northwindINSERT shippers (companyname)VALUES ('Fitch & Mather')GO

Agregando Datos

USE northwindSELECT *FROM shippersWHERE companyname = 'Fitch & Mather'GO

Verificando Datos nuevos

shipperid

37

companyname

Fitch & Mather

phone

Null

Permite Valores Null

Ejemplo 1

Ejemplo 2

Modificando DatosModificando Datos

Page 77: BHPTraining SQLServer2000 Programadores 2

Insertando Datos utilizando columnas por defecto

• DEFAULT– Inserta el valor por defecto

especificado en la columna– La columna debe tener un valor por

defecto o permitir valores null

USE northwindINSERT shippers (companyname, phone) VALUES ('Kenya Coffee Co.', DEFAULT)GO

Modificando DatosModificando Datos

Page 78: BHPTraining SQLServer2000 Programadores 2

Insertando Datos utilizando columnas por defecto

• DEFAULT VALUES– Inserta valores por defecto a todas las

columnas– La columna debe tener un valor por

defecto o permitir valores null

Modificando DatosModificando Datos

Page 79: BHPTraining SQLServer2000 Programadores 2

Eliminando Datos• Uso de la sentencia DELETE • Usando la sentencia TRUNCATE TABLE • Eliminando filas basándose en otrsa tablas

Modificando DatosModificando Datos

Page 80: BHPTraining SQLServer2000 Programadores 2

Uso de la sentencia DELETE • La sentencia DELETE remueve una o mas filas

in una tabla teniendo en cuenta la cláusula WHERE y su condición.

• Cada fila eliminada es cargada en el transaction log

USE northwindDELETE orders WHERE DATEDIFF(MONTH, shippeddate, GETDATE()) >= 6GO

Modificando DatosModificando Datos

Page 81: BHPTraining SQLServer2000 Programadores 2

USE northwindTRUNCATE TABLE ordersGO

Usando la sentencia TRUNCATE TABLE• La sentencia TRUNCATE TABLE elimina todas las filas

de una tabla• SQL Server retiene la estructura de la tabla y los

objetos relacionados• Sólo los puntos a las páginas de memoria son

almacenados en el transaction log

Modificando DatosModificando Datos

Page 82: BHPTraining SQLServer2000 Programadores 2

Eliminación de Datos basándose en otras tablas• Usando una cláusula FROM adicional

– La primera cláusula FROM indica la tabla a modificar

– La segunda cláusula FROM especifica el criterio de restricción de la sentencia DELETE

• Especificar condiciones en la cláusula WHERE– La subconsulta especifica cuales filas se

eliminarán

Modificando DatosModificando Datos

Page 83: BHPTraining SQLServer2000 Programadores 2

Actualizando Datos• Actualizando filas basándose en datos y de

una tabla• Actualizando filas basándose en otras tablas

Modificando DatosModificando Datos

Page 84: BHPTraining SQLServer2000 Programadores 2

USE northwindUPDATE products SET unitprice = (unitprice * 1.1)GO

Actualizando filas basándose en datos y de una tabla

• La cláusula WHERE especifica las filas a cambiar• SET Keyword especifica el nuevo dato• Los datos ingresados deben ser compatibles con

los tipos de datos de las columnas• La actualización no se lleva adelante en filas que

violan alguna regla de integridad

Modificando DatosModificando Datos

Page 85: BHPTraining SQLServer2000 Programadores 2

Actualizando filas basándose en otras tablas• Cómo trabajar con la sentencia UPDATE

– Nunca actualizar la misma fila dos veces– Las columnas requieren el prefijo de la

tabla cuando existen nombres ambiguos• Especificando filas para actualizar usando JOINS

– Usar la cláusula FROM• Especificand filas para actualizar usando

Subconsultas

Modificando DatosModificando Datos

Page 86: BHPTraining SQLServer2000 Programadores 2

Consideraciones de Rendimiento• Todas las modificaciones de datos ocurren en

una misma transacción• Data Page Allocation• El modificar datos indexados incrementar el

Overhead• Los indices pueden asistir en el criteria de

busqueda

Modificando DatosModificando Datos

Page 87: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Siempre escribir una sentencia SELECT que no modifica los datos antes de ejecutar sentencia que si lo hagan

Mejorar la legibilidad de los resultados cambiando los nombres de las columnas por literales

SIEMPRE incluir la cláusula WHERE cuando se utilizan las sentencias DELETE o UPDATE

Modificando DatosModificando Datos

Page 88: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Modificando DatosModificando Datos

Page 89: BHPTraining SQLServer2000 Programadores 2

Revisión• Usando Transacciones• Insertando Datos• Eliminando Datos• Actualizando Datos• Consideraciones de Rendimiento

Modificando DatosModificando Datos

Page 90: BHPTraining SQLServer2000 Programadores 2

Implementación de procedimientos almacenados

Page 91: BHPTraining SQLServer2000 Programadores 2

• Introducción a los procedimientos almacenados• Creación, ejecución, modificación y eliminación de

procedimientos almacenados• Utilización de parámetros en los procedimientos

almacenados• Ejecución de procedimientos almacenados

extendidos• Control de mensajes de error• Consideraciones acerca del rendimiento

Introducción

Implementación de procedimientos almacenados

Page 92: BHPTraining SQLServer2000 Programadores 2

• Definición de procedimientos almacenados• Procesamiento inicial de los procedimientos

almacenados • Procesamientos posteriores de los procedimientos

almacenados• Ventajas de los procedimientos almacenados

Introducción a los procedimientos almacenados

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 93: BHPTraining SQLServer2000 Programadores 2

Definición de procedimientos almacenados• Colecciones con nombre de instrucciones

Transact-SQL• Encapsulado de tareas repetitivas• Admiten cinco tipos (del sistema, locales,

temporales, remotos y extendidos)• Aceptar parámetros de entrada y devolver valores• Devolver valores de estado para indicar que se ha

ejecutado satisfactoriamente o se ha producido algún error

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 94: BHPTraining SQLServer2000 Programadores 2

Procesamiento inicial de los procedimientos almacenados

Se almacena en las tablassysobjects y syscomments

El plan compilado secoloca en la caché de

procedimientos

Compilación

Optimización

Creación

Ejecución(por primera vez o recompilación)

Análisis

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 95: BHPTraining SQLServer2000 Programadores 2

Procesamientos posteriores de los procedimientos almacenados

Plan de ejecución recuperado

Plan sin usar se retira

Plan de consulta Contexto de ejecución

SELECT *FROM dbo.memberWHERE member_no = ?

Conexión 1

8082

Conexión 2

Conexión 3

24

1003

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 96: BHPTraining SQLServer2000 Programadores 2

Ventajas de los procedimientos almacenados • Compartir la lógica de la aplicación• Exposición de los detalles de las tablas de la

base de datos• Proporcionar mecanismos de seguridad• Mejorar el rendimiento• Reducir el tráfico de red

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 97: BHPTraining SQLServer2000 Programadores 2

Creación, ejecución y modificación de procedimientos almacenados

• Creación de procedimientos almacenados• Recomendaciones para la creación de

procedimientos almacenados• Ejecución de procedimientos almacenados• Modificación y eliminación de procedimientos

almacenados

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 98: BHPTraining SQLServer2000 Programadores 2

Creación de procedimientos almacenados• Utilice la instrucción CREATE PROCEDURE para crearlos

en la base de datos activa

• Puede anidar hasta 32 niveles• Use sp_help para mostrar información

USE NorthwindGOCREATE PROC dbo.OverdueOrdersAS SELECT * FROM dbo.Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS NullGO

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 99: BHPTraining SQLServer2000 Programadores 2

Recomendaciones para la creación de procedimientos almacenados

• El usuario dbo debe ser el propietario de todos los procedimientos almacenados

• Un procedimiento almacenado por tarea• Crear, probar y solucionar problemas• Evite sp_Prefix en los nombres de

procedimientos almacenados

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 100: BHPTraining SQLServer2000 Programadores 2

Recomendaciones para la creación de procedimientos almacenados

• Utilice la misma configuración de conexión para todos los procedimientos almacenados

• Reduzca al mínimo la utilización de procedimientos almacenados temporales

• No elimine nunca directamente las entradas de Syscomments

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 101: BHPTraining SQLServer2000 Programadores 2

Ejecución de procedimientos almacenados• Ejecución de un procedimiento almacenado

por separado

• Ejecución de un procedimiento almacenado en una instrucción INSERT

EXEC OverdueOrders

INSERT INTO CustomersEXEC EmployeeCustomer

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 102: BHPTraining SQLServer2000 Programadores 2

Alteración y eliminación de procedimientos almacenados

• Modificación de procedimientos almacenados

– Incluya cualquiera de las opciones en ALTER PROCEDURE

– No afecta a los procedimientos almacenados anidados

• Eliminación de procedimientos almacenados

– Ejecute el procedimiento almacenado sp_depends para determinar si los objetos dependen

del procedimiento almacenado

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 103: BHPTraining SQLServer2000 Programadores 2

Alteración y eliminación de procedimientos almacenados

• Modificación de procedimientos almacenados– Eliminación de procedimientos almacenados– Ejecute el procedimiento almacenado sp_depends

para determinar si los objetos dependen del procedimiento almacenado

USE NorthwindGOALTER PROC dbo.OverdueOrdersASSELECT CONVERT(char(8), RequiredDate, 1) RequiredDate, CONVERT(char(8), OrderDate, 1) OrderDate, OrderID, CustomerID, EmployeeID FROM OrdersWHERE RequiredDate < GETDATE() AND ShippedDate IS NullORDER BY RequiredDateGO

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 104: BHPTraining SQLServer2000 Programadores 2

Práctica: Creación de Procedimientos Almacenados

SQL Server 2000

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 105: BHPTraining SQLServer2000 Programadores 2

Utilización de parámetros en los procedimientos almacenados

• Utilización de parámetros de entrada• Ejecución de procedimientos almacenados con

parámetros de entrada• Devolución de valores mediante parámetros de

salida• Volver a compilar explícitamente procedimientos

almacenados

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 106: BHPTraining SQLServer2000 Programadores 2

Utilización de parámetros de entrada• Valide primero todos los valores de los parámetros

de entrada• Proporcione los valores predeterminados

apropiados e incluya las comprobaciones de NullCREATE PROCEDURE dbo.[Year to Year Sales] @BeginningDate DateTime, @EndingDate DateTime ASIF @BeginningDate IS NULL OR @EndingDate IS NULLBEGIN RAISERROR('NULL values are not allowed', 14, 1) RETURNENDSELECT O.ShippedDate, O.OrderID, OS.Subtotal, DATENAME(yy,ShippedDate) AS YearFROM ORDERS O INNER JOIN [Order Subtotals] OS ON O.OrderID = OS.OrderIDWHERE O.ShippedDate BETWEEN @BeginningDate AND @EndingDateGO

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 107: BHPTraining SQLServer2000 Programadores 2

Ejecución de procedimientos almacenados con parámetros de entrada

• Paso de valores por el nombre del parámetro

EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321'

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 108: BHPTraining SQLServer2000 Programadores 2

Ejecución de procedimientos almacenados con parámetros de entrada

• Paso de valores por posición

EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321'

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 109: BHPTraining SQLServer2000 Programadores 2

Devolución de valores mediante parámetros de salida

CREATE PROCEDURE dbo.mathtutor@m1 smallint,

@m2 smallint,@result smallint OUTPUT

AS SET @result = @m1* @m2GODECLARE @answer smallintEXECUTE mathtutor 5, 6, @answer OUTPUTSELECT 'The result is: ' , @answer

The result is: 30Resultados del procedimientoalmacenado

Ejecución del procedimiento almacenado

Creación del procedimiento almacenado

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 110: BHPTraining SQLServer2000 Programadores 2

Volver a compilar explícitamente procedimientos almacenados

• Volver a compilar cuando– El procedimiento almacenado devuelve

conjuntos de resultados que varían considerablemente

– Se agrega un nuevo índice a una tabla subyacente

– El valor del parámetro es atípico

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 111: BHPTraining SQLServer2000 Programadores 2

Volver a compilar explícitamente procedimientos almacenados

• Volver a compilar mediante– CREATE PROCEDURE [WITH RECOMPILE]– EXECUTE [WITH RECOMPILE] – sp_recompile

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 112: BHPTraining SQLServer2000 Programadores 2

Ejecución de procedimientos almacenados extendidos

• Se programan con la API Servicios abiertos de datos• Pueden incluir características de C y C++• Pueden contener múltiples funciones• Se pueden llamar desde un cliente o desde SQL Server• Se pueden agregar sólo a la base de datos master

EXEC master..xp_cmdshell 'dir c:\'

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 113: BHPTraining SQLServer2000 Programadores 2

Control de mensajes de error• La instrucción RETURN sale incondicionalmente de

una consulta o procedimiento • sp_addmessage crea mensajes de error

personalizados• @@error contiene el número de error de la

instrucción ejecutada más recientemente

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 114: BHPTraining SQLServer2000 Programadores 2

Control de mensajes de error• Instrucción RAISERROR

– Devuelve un mensaje de error del sistema definido por el usuario

– Establece un indicador del sistema para registrar un error

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 115: BHPTraining SQLServer2000 Programadores 2

Consideraciones acerca del rendimiento

• Monitor de sistema de Windows 2000– Objeto: SQL Server: Administrador de caché– Objeto: Estadísticas de SQL

• Analizador de SQL– Puede supervisar eventos– Puede probar cada instrucción en un

procedimiento almacenado

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 116: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Compruebe los parámetros de entrada

Diseñe cada procedimiento almacenado para realizar una únicatarea

Valide los datos antes de comenzar las transacciones

Implementación de procedimientos almacenados

Utilice la misma configuración de conexión para todos losprocedimientos almacenados

Use WITH ENCRYPTION para ocultar texto de los procedimientosalmacenados

Implementación de procedimientos almacenados

Page 117: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 118: BHPTraining SQLServer2000 Programadores 2

Repaso• Introducción a los procedimientos almacenados• Creación, ejecución, modificación y eliminación de

procedimientos almacenados• Utilización de parámetros en los procedimientos

almacenados• Ejecución de procedimientos almacenados

extendidos• Control de mensajes de error• Consideraciones acerca del rendimiento

Implementación de procedimientos almacenadosImplementación de procedimientos almacenados

Page 119: BHPTraining SQLServer2000 Programadores 2

Implementación de funciones definidas por el usuario

Page 120: BHPTraining SQLServer2000 Programadores 2

Introducción• ¿Qué es una función definida por el usuario?• Definición de funciones definidas por el usuario• Ejemplos de funciones definidas por el usuario

Implementación de funciones definidas por el usuario

Page 121: BHPTraining SQLServer2000 Programadores 2

¿Qué es una función definida por el usuario?• Funciones escalares

– Similar a una función integrada• Funciones con valores de tabla de varias

instrucciones– Contenido como un procedimiento almacenado– Se hace referencia como una vista

• Funciones con valores de tabla en línea– Similar a una vista con parámetros– Devuelve una tabla como el resultado de una

instrucción SELECT única

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 122: BHPTraining SQLServer2000 Programadores 2

Definición de funciones definidas por el usuario• Creación de una función definida por el usuario• Creación de una función con enlace a esquema• Establecimiento de permisos para funciones

definidas por el usuario• Modificación y eliminación de funciones definidas

por el usuario

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 123: BHPTraining SQLServer2000 Programadores 2

Creación de una función definida por el usuario

USE NorthwindGOCREATE FUNCTION fn_NewRegion (@myinput nvarchar(30)) RETURNS nvarchar(30)BEGIN IF @myinput IS NULL SET @myinput = 'Not Applicable' RETURN @myinputEND

Creación de una función

Restricciones de las funciones

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 124: BHPTraining SQLServer2000 Programadores 2

Creación de una función con enlace a esquema• Todas las funciones definidas por el usuario y las

vistas a las que la función hace referencia también están enlazadas a esquema

• No se utiliza un nombre de dos partes para los objetos a los que hace referencia

• La función y los objetos se encuentran todos en la misma base de datos

• Tiene permiso de referencia en los objetos requeridos

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 125: BHPTraining SQLServer2000 Programadores 2

Establecimiento de permisos para funciones definidas por el usuario

• Necesita permiso para CREATE FUNCTION• Necesita permiso para EXECUTE• Necesita permiso para REFERENCE en las tablas,

vistas o funciones citadas• Debe ser propietario de la función para utilizar la

instrucción CREATE o ALTER TABLE

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 126: BHPTraining SQLServer2000 Programadores 2

Modificación y eliminación de funciones definidas por el usuario

• Modificación de funciones

– Conserva los permisos asignados– Hace que la definición de la función nueva

reemplace a la definición existente• Eliminación de funciones

ALTER FUNCTION dbo.fn_NewRegion <New function content>

DROP FUNCTION dbo.fn_NewRegion

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 127: BHPTraining SQLServer2000 Programadores 2

Ejemplos de funciones definidas por el usuario• Uso de una función escalar definida por el

usuario• Ejemplo de una función escalar definida por el

usuario• Uso de una función con valores de tabla de

varias instrucciones

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 128: BHPTraining SQLServer2000 Programadores 2

Ejemplos de funciones definidas por el usuario

• Ejemplo de una función con valores de tabla de varias instrucciones

• Uso de una función con valores de tabla en línea

• Ejemplo de una función con valores de tabla en línea

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 129: BHPTraining SQLServer2000 Programadores 2

Uso de una función escalar definida por el usuario

• La cláusula RETURNS especifica el tipo de datos• La función se define en un bloque BEGIN y END• El tipo de devolución puede ser cualquier tipo

de datos, excepto text, ntext, image, cursor o timestamp

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 130: BHPTraining SQLServer2000 Programadores 2

Ejemplo de una función escalar definida por el usuario

USE NorthwindGOCREATE FUNCTION fn_DateFormat

(@indate datetime, @separator char(1))RETURNS Nchar(20)ASBEGIN RETURN CONVERT(Nvarchar(20), datepart(mm,@indate)) + @separator + CONVERT(Nvarchar(20), datepart(dd, @indate)) + @separator + CONVERT(Nvarchar(20), datepart(yy, @indate))END

SELECT dbo.fn_DateFormat(GETDATE(), ':')

Creación de la función

Llamada a la función

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 131: BHPTraining SQLServer2000 Programadores 2

Uso de una función con valores de tabla de varias instrucciones

• BEGIN y END contienen múltiples instrucciones

• La cláusula RETURNS especifica el tipo de datos de la tabla

• La cláusula RETURNS da nombre y define la tabla

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 132: BHPTraining SQLServer2000 Programadores 2

Ejemplo de una función con valores de tabla de varias instrucciones

• Creación de la función

• Llamada a la función

USE NorthwindGOCREATE FUNCTION fn_Employees (@length nvarchar(9))RETURNS @fn_Employees TABLE (EmployeeID int PRIMARY KEY NOT NULL, [Employee Name] nvarchar(61) NOT NULL)ASBEGIN IF @length = 'ShortName' INSERT @fn_Employees SELECT EmployeeID, LastName FROM Employees ELSE IF @length = 'LongName' INSERT @fn_Employees SELECT EmployeeID, (FirstName + ' ' + LastName) FROM EmployeesRETURNEND

SELECT * FROM dbo.fn_Employees('LongName')- o bien -SELECT * FROM dbo.fn_Employees('ShortName')

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 133: BHPTraining SQLServer2000 Programadores 2

Uso de una función con valores de tabla en línea• El contenido de la función es una instrucción

SELECT• No utilice BEGIN y END• RETURN especifica table como el tipo de datos• El formato se define por el conjunto de resultados

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 134: BHPTraining SQLServer2000 Programadores 2

Ejemplo de una función con valores de tabla en línea Creación de la función

Llamada a la función mediante un parámetro

USE NorthwindGOCREATE FUNCTION fn_CustomerNamesInRegion ( @RegionParameter nvarchar(30) )RETURNS tableASRETURN ( SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers WHERE Region = @RegionParameter )

SELECT * FROM fn_CustomerNamesInRegion(N'WA')

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 135: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendadosUtilice funciones escalares complejas con conjuntos deresultados pequeños

Utilice funciones con varias instrucciones en lugar deprocedimientos almacenados que devuelven tablas

Utilice funciones en línea para crear vistas parametrizadas

Implementación de funciones definidas por el usuario

Utilice funciones en línea para filtrar vistas indizadas

Implementación de funciones definidas por el usuario

Page 136: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 137: BHPTraining SQLServer2000 Programadores 2

Repaso• ¿Qué es una función definida por el usuario?• Definición de funciones definidas por el usuario• Ejemplos de funciones definidas por el usuario

Implementación de funciones definidas por el usuarioImplementación de funciones definidas por el usuario

Page 138: BHPTraining SQLServer2000 Programadores 2

Implementación de desencadenadores (triggers)

Page 139: BHPTraining SQLServer2000 Programadores 2

Introducción• Introducción a los desencadenadores• Definición de desencadenadores• Funcionamiento de los desencadenadores• Ejemplos de desencadenadores• Consideraciones acerca del rendimiento

Implementación de desencadenadores (triggers)

Page 140: BHPTraining SQLServer2000 Programadores 2

Introducción a los desencadenadores• ¿Qué es un desencadenador?• Uso de los desencadenadores• Consideraciones acerca del uso de

desencadenadores

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 141: BHPTraining SQLServer2000 Programadores 2

¿Qué es un desencadenador?• Asociación a una tabla• Invocación automática• Imposibilidad de llamada directa• Identificación con una transacción

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 142: BHPTraining SQLServer2000 Programadores 2

Uso de los desencadenadores• Cambios en cascada en tablas relacionadas de una

base de datos• Exigir una integridad de datos más compleja que

una restricción CHECK• Definición de mensajes de error personalizados• Mantenimiento de datos no normalizados• Comparación del estado de los datos antes y

después de su modificación

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 143: BHPTraining SQLServer2000 Programadores 2

Consideraciones acerca del uso de desencadenadores• Los propietarios de las tablas pueden designar

el primer y último desencadenador que se debe activar

• Debe tener permiso para ejecutar todas las instrucciones definidas en los desencadenadores

• Los propietarios de tablas no pueden crear desencadenadores AFTER en vistas o en tablas temporales

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 144: BHPTraining SQLServer2000 Programadores 2

Consideraciones acerca del uso de desencadenadores

• Los desencadenadores son reactivos, mientras que las restricciones son proactivas

• Las restricciones se comprueban antes• Las tablas pueden tener varios

desencadenadores para cualquier acción

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 145: BHPTraining SQLServer2000 Programadores 2

Definición de desencadenadores• Creación de desencadenadores• Alteración y eliminación de desencadenadores

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 146: BHPTraining SQLServer2000 Programadores 2

Creación de desencadenadores• Necesidad de los permisos adecuados• Imposibilidad de incluir determinadas

instrucciones

Use NorthwindGOCREATE TRIGGER Empl_Delete ON EmployeesFOR DELETE ASIF (SELECT COUNT(*) FROM Deleted) > 1BEGIN RAISERROR( 'You cannot delete more than one employee at a time.', 16, 1) ROLLBACK TRANSACTIONEND

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 147: BHPTraining SQLServer2000 Programadores 2

Alteración y eliminación de desencadenadores• Alteración de un desencadenador

– Cambios en la definición sin quitar el desencadenador

– Deshabilitación o habilitación de un desencadenador

• Eliminación de un desencadenador

USE NorthwindGOALTER TRIGGER Empl_Delete ON EmployeesFOR DELETE ASIF (SELECT COUNT(*) FROM Deleted) > 6BEGIN RAISERROR( 'You cannot delete more than six employees at a time.', 16, 1) ROLLBACK TRANSACTIONEND

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 148: BHPTraining SQLServer2000 Programadores 2

Funcionamiento de los desencadenadores

• Funcionamiento de un desencadenador INSERT• Funcionamiento de un desencadenador DELETE• Funcionamiento de un desencadenador UPDATE• Funcionamiento de un desencadenador INSTEAD OF• Funcionamiento de los desencadenadores anidados• Desencadenadores recursivos

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 149: BHPTraining SQLServer2000 Programadores 2

Funcionamiento de un desencadenador INSERTInstrucción INSERT en tabla con desencadenador INSERT INSERT [Order Details] VALUES

(10525, 2, 19.00, 5, 0.2)

Order Details

OrderID

105221052310524

ProductID

10417

UnitPrice

31.009.65

30.00

Quantity

79

24

Discount

0.20.150.0

19.002 0.210523 5

Instrucción INSERT registrada

inserted

10523 2 19.00 5 0.2

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 150: BHPTraining SQLServer2000 Programadores 2

Funcionamiento de un desencadenador INSERTInstrucción INSERT en tabla con desencadenador INSERT INSERT [Order Details] VALUES

(10525, 2, 19.00, 5, 0.2)

Order Details

OrderID

105221052310524

ProductID

10417

UnitPrice

31.009.65

30.00

Quantity

79

24

Discount

0.20.150.0

19.002 0.210523 5

Instrucción INSERT registrada

inserted

10523 2 19.00 5 0.2

Ejecución de acciones TRIGGER

Order DetailsOrderID

105221052310524

ProductID

10417

UnitPrice

31.009.65

30.00

Quantity

79

24

Discount

0.20.150.0

5 19.002 0.210523

Trigger Code:USE NorthwindCREATE TRIGGER OrdDet_InsertON [Order Details]FOR INSERTASUPDATE P SET UnitsInStock = (P.UnitsInStock – I.Quantity)FROM Products AS P INNER JOIN Inserted AS ION P.ProductID = I.ProductID

UPDATE P SET UnitsInStock = (P.UnitsInStock – I.Quantity)FROM Products AS P INNER JOIN Inserted AS ION P.ProductID = I.ProductID

15106520

1234

ProductsProductID UnitsInStock … …

2 15

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 151: BHPTraining SQLServer2000 Programadores 2

Funcionamiento de un desencadenador INSERTInstrucción INSERT en tabla con desencadenador INSERT

Instrucción INSERT en una tabla con undesencadenador INSERT

Instrucción INSERT registrada

Acción del desencadenador ejecutada

1

2

3

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 152: BHPTraining SQLServer2000 Programadores 2

Funcionamiento de un desencadenador DELETEInstrucción DELETE en tabla con desencadenador DELETE

Deleted

4 Dairy Products Cheeses 0x15…

Instrucción DELETE registrada

CategoriesCategoryID

123

CategoryName

BeveragesCondimentsConfections

Description

Soft drinks, coffees…Sweet and savory …Desserts, candies, …

Picture

0x15…0x15…0x15… 0x15…CheesesDairy Products4

DELETE CategoriesWHERE CategoryID = 4

DELETE CategoriesWHERE CategoryID = 4USE NorthwindCREATE TRIGGER Category_Delete

ON CategoriesFOR DELETE

ASUPDATE P SET Discontinued = 1FROM Products AS P INNER JOIN deleted AS dON P.CategoryID = d.CategoryID

USE NorthwindCREATE TRIGGER Category_Delete

ON CategoriesFOR DELETE

ASUPDATE P SET Discontinued = 1FROM Products AS P INNER JOIN deleted AS dON P.CategoryID = d.CategoryID

ProductsProductID Discontinued … …

1234

0000

Acción del desencadenador ejecutada

2 1

UPDATE P SET Discontinued = 1FROM Products AS P INNER JOIN deleted AS dON P.CategoryID = d.CategoryID

Instrucción DELETE en una tabla con un desencadenador DELETE

Instrucción DELETE registrada

Acción del desencadenador ejecutada

1

2

3

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 153: BHPTraining SQLServer2000 Programadores 2

Funcionamiento de un desencadenador UPDATEInstrucción UPDATE para una tabla con un desencadenador UPDATE definido

UPDATE EmployeesSET EmployeeID = 17WHERE EmployeeID = 2

UPDATE EmployeesSET EmployeeID = 17WHERE EmployeeID = 2

Instrucción UPDATE registrada como instrucciones INSERT y DELETE

EmployeesEmployeeID LastName FirstName Title HireDate

1234

DavolioBarrLeverlingPeacock

NancyAndrewJanetMargaret

Sales Rep.RSales Rep.Sales Rep.

~~~~~~~~~~~~

2 Fuller Andrew Vice Pres. ~~~

insertada

17 Fuller Andrew Vice Pres. ~~~

eliminada

2 Fuller Andrew Vice Pres. ~~~

Ejecución de acciones TRIGGERUSE NorthwindGOCREATE TRIGGER Employee_Update

ON EmployeesFOR UPDATE

ASIF UPDATE (EmployeeID)BEGIN TRANSACTION

RAISERROR ('Transaction cannot be processed.\***** Employee ID number cannot be modified.', 10, 1)ROLLBACK TRANSACTION

ASIF UPDATE (EmployeeID)BEGIN TRANSACTIONRAISERROR ('Transaction cannot be processed.\***** Employee ID number cannot be modified.', 10, 1)ROLLBACK TRANSACTION

No se puede procesar la transacción. ***** No se puede modificar el número de miembro No se puede procesar la transacción. ***** No se puede modificar el número de miembro

Employees

EmployeeID LastName FirstName Title HireDate

1234

1234

DavolioBarrLeverlingPeacock

DavolioBarrLeverlingPeacock

NancyAndrewJanetMargaret

NancyAndrewJanetMargaret

Sales Rep.RSales Rep.Sales Rep.

Sales Rep.RSales Rep.Sales Rep.

~~~~~~~~~~~~

~~~~~~~~~~~~

2 Fuller Andrew Vice Pres. ~~~

Instrucción UPDATE en una tabla con undesencadenador UPDATE

Instrucción UPDATE registrada como instruccionesINSERT y DELETE

Acción del desencadenador ejecutada

1

2

3

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 154: BHPTraining SQLServer2000 Programadores 2

Funcionamiento de los desencadenadores anidados

UnitsInStock + UnitsOnOrder es < ReorderLevel para ProductID 2

OrDe_Update

La realización de un pedido provoca la ejecución del desencadenador OrDe_Update

Se ejecuta la instrucción UPDATE en la tabla Products

InStock_UpdateProducts

ProductID UnitsInStock … …

1

34

15156520

Se ejecuta el desencadenador InStock_Update

Envía un mensaje

Order_DetailsOrderID

105221052310524

ProductID

10417

UnitPrice

31.009.65

30.00

Quantity

79

24

Discount

0.20.150.0

10525 19.002 0.25

2 15

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 155: BHPTraining SQLServer2000 Programadores 2

Desencadenadores recursivos• Activación recursiva de un desencadenador• Tipos de desencadenadores recursivos

– Recursividad directa, que se da cuando un desencadenador se ejecuta y realiza una acción que lo activa de nuevo

– Recursividad indirecta, que se da cuando un desencadenador se activa y realiza una acción que activa un desencadenador de otra tabla

• Conveniencia del uso de los desencadenadores recursivos

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 156: BHPTraining SQLServer2000 Programadores 2

Ejemplos de desencadenadores

• Exigir la integridad de los datos• Exigir reglas de empresa

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 157: BHPTraining SQLServer2000 Programadores 2

Exigir la integridad de los datosCREATE TRIGGER BackOrderList_Delete

ON Products FOR UPDATEASIF (SELECT BO.ProductID FROM BackOrders AS BO JOIN

Inserted AS I ON BO.ProductID = I.Product_ID) > 0

BEGINDELETE BO FROM BackOrders AS BO INNER JOIN Inserted AS I ON BO.ProductID = I.ProductID

END

ProductsProductID UnitsInStock … …

1

34

15106520

2 15 Actualizada

BackOrdersProductID UnitsOnOrder …

1123

151065

2 15 El desencadenador

elimina la fila

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 158: BHPTraining SQLServer2000 Programadores 2

Exigir reglas de empresa

Products

ProductID UnitsInStock … …

1234

15106520

Los productos con pedidos pendientes no se pueden eliminar

IF (Select Count (*) FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = deleted.ProductID ) > 0ROLLBACK TRANSACTION

La instrucción DELETE se ejecuta en la tabla Product

El código del desencadenadorcomprueba la tabla Order Details

Order Details

OrderID

10522105231052410525

ProductID

102417

UnitPrice

31.0019.009.65

30.00

Quantity

79

24

Discount

0.20.150.0

9

'No puede procesarse la transacción''Este producto tiene historial de pedidos'

Se deshacela transacción

2 0

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 159: BHPTraining SQLServer2000 Programadores 2

Consideraciones acerca del rendimiento• Los desencadenadores trabajan rápidamente porque

las tablas insertadas y eliminadas están en la caché• El tiempo de ejecución está determinado por:

– Número de tablas a las que se hace referencia

– Número de filas afectadas• Las acciones contenidas en un desencadenador

forman parte de una transacción

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 160: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Utilice desencadenadores sólo cuando sea necesario

Procure que las instrucciones de la definición de losdesencadenadores sean tan sencillas como sea posible

Incluya instrucciones de comprobación de terminación de larecursividad en las definiciones de los desencadenadoresrecursivos

Reduzca al mínimo el uso de instrucciones ROLLBACK enlos desencadenadores

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 161: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 162: BHPTraining SQLServer2000 Programadores 2

Repaso• Introducción a los desencadenadores• Definición de desencadenadores• Funcionamiento de los desencadenadores• Ejemplos de desencadenadores• Consideraciones acerca del rendimiento

Implementación de desencadenadores (triggers)Implementación de desencadenadores (triggers)

Page 163: BHPTraining SQLServer2000 Programadores 2

Optimización del rendimiento de las consultas

Page 164: BHPTraining SQLServer2000 Programadores 2

Introducción• Introducción al optimizador de consultas• Obtención de información del plan de ejecución• Uso de un índice para abarcar una consulta• Estrategias de indización• Suplantación del optimizador de consultas

Optimización de las consultas

Page 165: BHPTraining SQLServer2000 Programadores 2

Introducción al optimizador de consultas• Función del optimizador de consultas• Cómo utiliza el optimizador de consultas la

optimización basada en el costo• Cómo funciona el optimizador de consultas• Fases de la optimización de consultas• Almacenamiento en caché del plan de ejecución• Establecimiento de un límite de costo

Optimización de las consultasOptimización de las consultas

Page 166: BHPTraining SQLServer2000 Programadores 2

Función del optimizador de consultas• Determina el plan de ejecución más eficaz

– Determinar la existencia de índices y evaluar su utilidad

– Determinar los índices o las columnas que se pueden utilizar

– Determinar cómo procesar las combinaciones– Uso de evaluación basada en costos de alternativas– Creación de estadísticas de columnas

• Utiliza información adicional• Produce un plan de ejecución

Optimización de las consultasOptimización de las consultas

Page 167: BHPTraining SQLServer2000 Programadores 2

Cómo utiliza el optimizador de consultas la optimización basada en el costo

• Limita el número de planes de optimización– El costo se estima en términos de E/S y costo de

CPU• Determina el tiempo de procesamiento de las

consultas– Utilice operadores físicos y secuencia de

operaciones– Utilice procesos paralelos y en serie

Optimización de las consultasOptimización de las consultas

Page 168: BHPTraining SQLServer2000 Programadores 2

Cómo funciona el optimizador de consultas

Proceso de análisis

Proceso de estandarización

Optimización de la consulta

Compilación

Rutinas de acceso abases de datos

Transact-SQL

Conjuntode

resultados

Optimización de las consultasOptimización de las consultas

Page 169: BHPTraining SQLServer2000 Programadores 2

Fases de la optimización de consultas• Análisis de la consulta

– Identifica los criterios de búsqueda y combinación de la consulta

• Selección de índices– Determina si existe algún índice– Produce una valoración de la utilidad del índice o

índices• Selección de la combinación

– Evalúa qué estrategia de combinación se va a utilizar

Optimización de las consultasOptimización de las consultas

Page 170: BHPTraining SQLServer2000 Programadores 2

Almacenamiento en caché del plan de ejecución• Almacenamiento de un plan de ejecución en la

memoria– Una copia para todas las ejecuciones en serie– Otra copia para todas las ejecuciones en paralelo

• Uso de un contexto de ejecución– Se vuelve a utilizar un plan de ejecución

existente, si lo hay

– Se genera un plan de ejecución nuevo, si no existe uno

Optimización de las consultasOptimización de las consultas

Page 171: BHPTraining SQLServer2000 Programadores 2

Almacenamiento en caché del plan de ejecución• Recompilación de planes de ejecución

– Los cambios en la base de datos pueden hacer que el plan de ejecución sea ineficaz o deje de ser válido

Optimización de las consultasOptimización de las consultas

Page 172: BHPTraining SQLServer2000 Programadores 2

Establecimiento de un límite de costo• Especificación de un límite máximo

– Utilice el regulador de consultas para evitar que se ejecuten consultas que tarden mucho tiempo y usen muchos recursos del sistema

• Especificación de límites de conexión– Use el procedimiento almacenado sp_configure

Optimización de las consultasOptimización de las consultas

Page 173: BHPTraining SQLServer2000 Programadores 2

Establecimiento de un límite de costo• Especificación de límites de conexión

– Ejecute la instrucción SET QUERY_GOVERNOR_COST_LIMIT

– Especifique 0 para desactivar el regulador de consultas

Optimización de las consultasOptimización de las consultas

Page 174: BHPTraining SQLServer2000 Programadores 2

Obtención de información del plan de ejecución• Presentación de los resultados de las instrucciones

STATISTICS• Presentación de los resultados de SHOWPLAN_ALL y

SHOWPLAN_TEXT• Presentación gráfica del plan de ejecución

Optimización de las consultasOptimización de las consultas

Page 175: BHPTraining SQLServer2000 Programadores 2

Presentación de los resultados de las instrucciones STATISTICS

Instrucción Ejemplo de salida

STATISTICSTIME

STATISTICSPROFILE

STATISTICS IO

SQL Server Execution Times:CPU time = 0 ms, elapsed time = 2 ms.

Rows Executes StmtText StmtId…-----------------------------------------------47 1 SELECT * FROM [charge] 16 WHERE (([charge_amt]>=@1) . . .

Table 'member'. Scan count 1,logical reads 23, physical reads 0, read-ahead reads 0.

Optimización de las consultasOptimización de las consultas

Page 176: BHPTraining SQLServer2000 Programadores 2

Presentación de los resultados de SHOWPLAN_ALL y SHOWPLAN_TEXT• Estructura de los resultados de la instrucción

SHOWPLAN– Devuelven información en forma de un

conjunto de filas– Forman un árbol jerárquico– Representan los pasos realizados por el

optimizador de consultas– Muestran un cálculo de cómo se optimizó una

consulta, no el plan de ejecución real

Optimización de las consultasOptimización de las consultas

Page 177: BHPTraining SQLServer2000 Programadores 2

Presentación de los resultados de SHOWPLAN_ALL y SHOWPLAN_TEXT• Detalles de los pasos de ejecución• Diferencia entre los resultados de

SHOWPLAN_TEXT y SHOWPLAN_ALL

Optimización de las consultasOptimización de las consultas

Page 178: BHPTraining SQLServer2000 Programadores 2

Presentación gráfica del plan de ejecución• Elementos del plan de ejecución gráfico• Lectura de los resultados del plan de ejecución

gráfico• Uso de la operación de consulta de marcadores

Optimización de las consultasOptimización de las consultas

Page 179: BHPTraining SQLServer2000 Programadores 2

Elementos del plan de ejecución gráfico• Los pasos son unidades de trabajo que se utilizan

para procesar una consulta• La secuencia de pasos es el orden en que se procesan

los pasos• Los operadores lógicos describen la operación

algebraica relacional que se utiliza para procesar una instrucción

• Los operadores físicos describen el algoritmo de implementación física que se utiliza para procesar una instrucción

Optimización de las consultasOptimización de las consultas

Page 180: BHPTraining SQLServer2000 Programadores 2

Lectura de los resultados del plan de ejecución gráficoPlan de consulta

SELECTCosto: 0%

Consulta de marcadoresCosto: 8%

Raíz decombinación hash…

Costo: 28%

Member.corp_noCosto: 9%

Member.fnameCosto: 10%

FiltroCosto: 0%

Secuencia de pasosSecuencia de pasos

Búsqueda en índiceRecorre un intervalo de filas en particular desde un índice no agrupado.

Operación física:Operación lógica:Cuenta de filas:Tamaño estimado de fila:Costo de E/S:Costo de CPU:Número de ejecuciones:Costo:Costo del subárbol:

Búsqueda en índiceBúsqueda en índice

41424

0,007060,000605

1,00,007675(6%)

0,00767

Argumento:OBJECT: ([credit].[dbo].[member].[fname]), SEEK: ([member],[firstname] >=‘Rb’ AND [member],[firstname] <‘T’) ORDERED

Optimización de las consultasOptimización de las consultas

Page 181: BHPTraining SQLServer2000 Programadores 2

Uso de la operación de consulta de marcadores• Análisis del plan de consultas

– Normalmente se utiliza después de haber procesado todos los pasos

• Recuperación de filas– Identificadores de fila– Claves de agrupación

Optimización de las consultasOptimización de las consultas

Page 182: BHPTraining SQLServer2000 Programadores 2

Uso de la operación de consulta de marcadores• Observación de los detalles

– Se utiliza una etiqueta de marcador para buscar la fila

• Determinación de cuándo se utiliza el operador de consulta de marcadores– Las consultas contienen la cláusula IN o el

operador OR

Optimización de las consultasOptimización de las consultas

Page 183: BHPTraining SQLServer2000 Programadores 2

Uso de un índice para abarcar una consulta• Introducción a los índices que abarcan consultas• Búsqueda de datos mediante índices que abarcan

consultas• Identificación de si se puede utilizar un índice para

abarcar una consulta• Determinación de si se utiliza un índice para abarcar

una consulta• Instrucciones para la creación de índices que abarcan

consultas

Optimización de las consultasOptimización de las consultas

Page 184: BHPTraining SQLServer2000 Programadores 2

Introducción a los índices que abarcan consultas• Sólo los índices no agrupados pueden abarcar

consultas• Los índices deben contener todas las columnas a las

que se hace referencia en la consulta• No es necesario el acceso a las páginas de datos• Las vistas indizadas pueden agregar datos anteriores• Los índices que abarcan consultas recuperan los

datos rápidamente

Optimización de las consultasOptimización de las consultas

Page 185: BHPTraining SQLServer2000 Programadores 2

Búsqueda de datos mediante índices que abarcan consultas

• Ejemplo de exploración de una sola página• Ejemplo de exploración de recorrido parcial• Ejemplo de exploración de recorrido completo

Optimización de las consultasOptimización de las consultas

Page 186: BHPTraining SQLServer2000 Programadores 2

Ejemplo de exploración de una sola páginaSELECT lastname, firstnameFROM memberWHERE lastname = 'Hall'

Páginas de índice

No situadas enel nivel de hoja

Nivel de hoja(valor de clave)

AkhtarBarrBarrBormBuhl

Sarah…………

GanioHallHallHartJonesJones

JonDonDonSherriAmyBeverly

Hall DonLangMartinMartinMartinMoris

Eric…………

Páginas de datos

… …

AkhtarLang……

SarahEric……

Akhtar…Ganio…

Sarah…Jon…

Lang………

Eric………

Optimización de las consultasOptimización de las consultas

Page 187: BHPTraining SQLServer2000 Programadores 2

Ejemplo de exploración de recorrido parcialUSE creditSELECT lastname, firstname FROM memberWHERE lastname BETWEEN 'Funk' AND 'Lang'

Páginas de índice

No situadas enel nivel de hoja

Nivel de hoja(valor de clave)

AkhtarBarrBarrBormBuhl

……………

GanioHallHart

JonesJones

……………

MorganNashNayOta

Rudd

……………

ChaiConConCoxDale

……………

DunnDunnFineFortFunk

……………

JordanKimKim

KochKoch

……………

LangMartinMartinMartinMoris

……………

SmithSmithSmithSmithSmith

……………

Páginas de datos

AkhtarChaiDunnGanio

…………

JordanLangMorganSmith

…………

Akhtar

Jordan

Optimización de las consultas

Page 188: BHPTraining SQLServer2000 Programadores 2

Ejemplo de exploración de recorrido completoUSE creditSELECT lastname, firstnameFROM member

Páginas de índice

No situadas enel nivel de hoja

Nivel de hoja(valor de clave)

AkhtarBarrBarrBormBuhl

……………

GanioHallHart

JonesJones

……………

MorganNashNayOta

Rudd

……………

MartinSmith

AkhtarGanio

Akhtar…

Martin

ChaiConConCoxDale

……………

DunnDunnFineFortFunk

……………

JordanKimKim

KochKoch

……………

LangMartinMartinMartinMoris

……………

SmithSmithSmithSmithSmith

……………

Páginas de datos

Optimización de las consultasOptimización de las consultas

Page 189: BHPTraining SQLServer2000 Programadores 2

Identificación de si se puede utilizar un índice para abarcar una consulta

• Todos los datos necesarios deben estar en el índice• Un índice compuesto es útil aunque no se haga

referencia a la primera columna• No es necesaria una cláusula WHERE

Optimización de las consultasOptimización de las consultas

Page 190: BHPTraining SQLServer2000 Programadores 2

Identificación de si se puede utilizar un índice para abarcar una consulta

• Se puede utilizar un índice no agrupado si requiere menos E/S que un índice agrupado que contenga una columna a la que se hace referencia en la cláusula WHERE

• Los índices se pueden combinar para abarcar consultas

Optimización de las consultasOptimización de las consultas

Page 191: BHPTraining SQLServer2000 Programadores 2

Determinación de si se utiliza un índice para abarcar una consulta• Observación de los resultados del plan de

ejecución – Se muestra la frase “Comprobar un índice no

agrupado, en su totalidad o sólo un intervalo”• Comparación de E/S

– Índice no agrupado• Número total de niveles no situados en el

nivel de hoja

Optimización de las consultasOptimización de las consultas

Page 192: BHPTraining SQLServer2000 Programadores 2

Determinación de si se utiliza un índice para abarcar una consulta• Comparación de E/S

– Índice no agrupado• Número total de páginas que componen el

nivel de hoja• Número total de filas por página del nivel de

hoja• Número total de filas por página de datos

– Número total de páginas que componen la tabla

Optimización de las consultasOptimización de las consultas

Page 193: BHPTraining SQLServer2000 Programadores 2

Instrucciones para la creación de índices que abarcan consultas

• Agregar columnas a los índices• Reduzca el tamaño de la clave del índice• Mantenga una proporción de tamaño entre la fila

y la clave

Optimización de las consultasOptimización de las consultas

Page 194: BHPTraining SQLServer2000 Programadores 2

Estrategias de indización• Evaluación de la E/S para las consultas que tienen

acceso a un intervalo de datos• Indización para varias consultas• Instrucciones para la creación de índices

Optimización de las consultasOptimización de las consultas

Page 195: BHPTraining SQLServer2000 Programadores 2

Método de acceso

Recorrido de tabla

Índice agrupado en la columna charge_amt

Índice no agrupado en la columna charge_amt

Índice compuesto en las columnas charge_amt y charge_no

Página de E/S

10.417

1042

100.273

273

Evaluación de la E/S para las consultas que tienen acceso a un intervalo de datos

SELECT charge_noFROM chargeWHERE charge_amt BETWEEN 20 AND 30

Optimización de las consultasOptimización de las consultas

Page 196: BHPTraining SQLServer2000 Programadores 2

Indización para varias consultas

USE creditSELECT charge_no, charge_dt, charge_amtFROM chargeWHERE statement_no = 19000 AND member_no = 3852

USE creditSELECT member_no, charge_no, charge_amtFROM chargeWHERE charge_dt between '07/30/1999'AND '07/31/1999' AND member_no = 9331

Ejemplo 1

Ejemplo 2

Optimización de las consultasOptimización de las consultas

Page 197: BHPTraining SQLServer2000 Programadores 2

Instrucciones para la creación de índices• Determine las prioridades de todas las

consultas• Determine la selectividad de cada parte de la

cláusula WHERE de cada consulta• Determine si es conveniente crear un índice• Identifique las columnas que se deben indizar• Determine el mejor orden para las columnas

de los índices compuestos• Determine los demás índices que sean

necesarios• Pruebe el rendimiento de las consultas

Optimización de las consultasOptimización de las consultas

Page 198: BHPTraining SQLServer2000 Programadores 2

Suplantación del optimizador de consultas• Determinación de cuándo se debe suplantar el

optimizador de consultas• Uso de las sugerencias y la instrucción SET

FORCEPLAN • Comprobación del rendimiento de las consultas

después de suplantar el optimizador de consultas

Optimización de las consultasOptimización de las consultas

Page 199: BHPTraining SQLServer2000 Programadores 2

Determinación de cuándo se debe suplantar el optimizador de consultas

• Limitar las sugerencias de optimizador• Antes de suplantar el optimizador de consultas debe

explorar las demás alternativas mediante:– Actualización de estadísticas– Recompilación de procedimientos almacenados– Revisión de las consultas o argumentos de búsqueda– Evaluación de la posibilidad de crear índices

diferentes

Optimización de las consultasOptimización de las consultas

Page 200: BHPTraining SQLServer2000 Programadores 2

Uso de las sugerencias y la instrucción SET FORCEPLAN

• Sugerencias de tabla• Sugerencias de combinación• Sugerencias de consulta• Instrucción SET FORCEPLAN

Optimización de las consultasOptimización de las consultas

Page 201: BHPTraining SQLServer2000 Programadores 2

Comprobación del rendimiento de las consultas después de suplantar el optimizador de consultas

• Compruebe que mejora el rendimiento• Documente las razones para utilizar sugerencias de

optimizador• Vuelva a probar las consultas regularmente

Optimización de las consultasOptimización de las consultas

Page 202: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendadosUtilice el regulador de consultas para evitar que se ejecutenconsultas que tarden mucho tiempo y usen muchos recursosdel sistema

Examine y conozca totalmente los datos y cómo se tendrá accesoa ellos en las consultas

Cree índices que resuelvan las consultas utilizadas con másfrecuencia

Establezca estrategias de indización para consultas individualesy múltiples

Evite la suplantación del optimizador de consultas

Optimización de las consultasOptimización de las consultas

Page 203: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Optimización de las consultasOptimización de las consultas

Page 204: BHPTraining SQLServer2000 Programadores 2

Repaso• Introducción al optimizador de consultas• Obtención de información del plan de ejecución• Uso de un índice para abarcar una consulta• Estrategias de indización• Suplantación del optimizador de consultas

Optimización de las consultasOptimización de las consultas

Page 205: BHPTraining SQLServer2000 Programadores 2

Análisis de consultas

Page 206: BHPTraining SQLServer2000 Programadores 2

Introducción• Consultas que utilizan el operador AND• Consultas que utilizan el operador OR• Consultas que utilizan operaciones de combinación

Análisis de consultas

Page 207: BHPTraining SQLServer2000 Programadores 2

Consultas que utilizan el operador AND• Procesamiento del operador AND

– Devuelve las filas que cumplen todas las condiciones de cada criterio especificado en la cláusula WHERE

– Limita de forma progresiva el número de filas devueltas con cada condición de búsqueda adicional

– Puede utilizar un índice por cada condición de búsqueda de la cláusula WHERE

Análisis de consultasAnálisis de consultas

Page 208: BHPTraining SQLServer2000 Programadores 2

Consultas que utilizan el operador AND• Directrices de indización y consideraciones de

rendimiento– Definir un índice en un criterio de búsqueda

altamente selectivo– Evaluar el rendimiento entre crear varios

índices de una columna y un índice compuesto

Análisis de consultasAnálisis de consultas

Page 209: BHPTraining SQLServer2000 Programadores 2

Consultas que utilizan el operador OR• Devuelve las filas que cumplen cualquier

condición de cada criterio especificado en la cláusula WHERE

• Aumenta de forma progresiva el número de filas devueltas con cada condición de búsqueda adicional

• Puede utilizar un índice o índices diferentes para cada parte del operador OR

Análisis de consultasAnálisis de consultas

Page 210: BHPTraining SQLServer2000 Programadores 2

Consultas que utilizan el operador OR• Siempre realiza un recorrido de tabla o de

índice agrupado si una columna a la que se hace referencia en el operador OR no tiene un índice o si éste no es útil

• Puede utilizar varios índices

Análisis de consultasAnálisis de consultas

Page 211: BHPTraining SQLServer2000 Programadores 2

Práctica: Análisis de consultas que utilizan los operadores AND y OR

SQL Server 2000

Análisis de consultasAnálisis de consultas

Page 212: BHPTraining SQLServer2000 Programadores 2

Cons. MarcadoresComb. hash/inter…

Filtro

member.fname

Filtro

member.corp_no

Select

Análisis de consultasAnálisis de consultas

Page 213: BHPTraining SQLServer2000 Programadores 2

Cons. MarcadoresEq. comb. hash…Filtro

member.fnamemember.corp_no

Select

Raíz comb. hash…

member.mem_no

Análisis de consultasAnálisis de consultas

Page 214: BHPTraining SQLServer2000 Programadores 2

Cons. Marcadoresmember.mbr_mem... SELECT

Análisis de consultasAnálisis de consultas

Page 215: BHPTraining SQLServer2000 Programadores 2

Análisis de consultas

SELECTCosto: 1%

Recorrido tablaCosto: 99%

Análisis de consultas

Page 216: BHPTraining SQLServer2000 Programadores 2

Consultas que utilizan oper. de combinación• Selectividad y densidad de una cláusula JOIN• Cómo se procesan las combinaciones• Cómo se procesan las combinaciones de bucle

anidado• Presentación multimedia: Cómo se procesan las

combinaciones de mezcla• Consideraciones acerca del uso de combinaciones

de mezcla• Cómo se procesan las combinaciones hash

Análisis de consultasAnálisis de consultas

Page 217: BHPTraining SQLServer2000 Programadores 2

Selectividad y densidad de una cláusula JOIN

• Selectividad de una cláusula JOIN– Si las estadísticas están

disponibles, se basa en la densidad del índice

– Si las estadísticas no están disponibles, se basa en el número de consideraciones

Selectividad

Po

rce

nta

je d

e f

ilas

de

vue

ltas

Análisis de consultasAnálisis de consultas

Page 218: BHPTraining SQLServer2000 Programadores 2

Selectividad y densidad de una cláusula JOIN

• Densidad de una cláusula JOIN– Un índice con un gran

número de duplicados tiene alta densidad

– Un índice único tiene baja densidad Selectividad

Po

rce

nta

je d

e f

ilas

de

vue

ltas

Análisis de consultasAnálisis de consultas

Page 219: BHPTraining SQLServer2000 Programadores 2

Cómo se procesan las combinaciones

membermember_no …...5678...

.

.

.Chen...

ResultadoÍndiceno agrupado único Índice no agrupado

chargecharge_no...15259...16351...17673...

member_no...5678...5678...5678...

member_no

5678567856785678567856785678567856785678567856785678

charge_no

30257176731525916351327784889760611667947439676840861738790299607

(13 filas afectadas)

USE creditSELECT m.member_no, c.charge_no, c.charge_amt, c.statement_noFROM member AS m INNER JOIN charge AS cON m.member_no = c.member_noWHERE c.member_no = 5678

Análisis de consultasAnálisis de consultas

Page 220: BHPTraining SQLServer2000 Programadores 2

Cómo se procesan las combinaciones de bucle anidadoUSE creditSELECT m.member_no, c.charge_no, c.charge_amt, s.statement_noFROM member AS m INNER JOIN charge AS cON m.member_no = c.member_no INNER JOIN statement AS sON c.member_no = s.member_noWHERE m.member_no = 5678

Combina el resultado con las filas correspondientes de la tabla charge

Recupera las filas correspondientesde ambas tablas y las combina

1

2

chargecharge_no...15259...16351...17673...

member_no...5678...5678...5678...

statementstatement_no...567815678...

member_no...56785678...

…........

membermember_no …...5678...

.

.

.Chen...

Análisis de consultasAnálisis de consultas

Page 221: BHPTraining SQLServer2000 Programadores 2

Consideraciones acerca del uso de combinaciones de mezcla

• Requiere que las columnas combinadas estén ordenadas

• Evalúa valores ordenados– Utiliza un índice del árbol existente– Aprovecha las operaciones de ordenación– Realiza su propia operación de ordenación

Análisis de consultasAnálisis de consultas

Page 222: BHPTraining SQLServer2000 Programadores 2

Consideraciones acerca del uso de combinaciones de mezcla

• Consideraciones acerca del rendimiento

USE creditSELECT m.lastname, p.payment_amt FROM member AS m INNER JOIN payment AS p ON m.member_no = p.member_no WHERE p.payment_amt < 7000 AND m.firstname < 'Jak'

Análisis de consultasAnálisis de consultas

Page 223: BHPTraining SQLServer2000 Programadores 2

Cómo se procesan las combinaciones hash

Claves hash

xxx

zzz

yyy

nnn

.

.

.

member_no

1

.

.

.

9817

.

.

.

Resultado member_no lastname …

9817 DeBroux …

Bucket hash

.

.

.

Filas de datos

yyy

9817

.

.

.

DeBroux

10686

.

.

.

Zuvel

8342

.

.

.

Hjellen

xxx

Entrada de sonda Entrada de generación

Análisis de consultasAnálisis de consultas

Page 224: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Definir un índice en una columna altamente selectiva

Asegurarse de que existen índices para todas las columnas a lasque se hace referencia en el operador OR

Minimice el uso de combinaciones hash

Análisis de consultasAnálisis de consultas

Page 225: BHPTraining SQLServer2000 Programadores 2

Repaso• Consultas que utilizan el operador AND• Consultas que utilizan el operador OR• Consultas que utilizan operaciones de combinación

Análisis de consultasAnálisis de consultas

Page 226: BHPTraining SQLServer2000 Programadores 2

Administración de transacciones y bloqueos

Page 227: BHPTraining SQLServer2000 Programadores 2

Introducción• Introducción a las transacciones y los bloqueos• Administración de las transacciones• Bloqueos en SQL Server• Administración de los bloqueos

Administración de transacciones y bloqueos

Page 228: BHPTraining SQLServer2000 Programadores 2

Introducción a las transacciones y los bloqueos• Las transacciones aseguran que varias

modificaciones a los datos se procesan juntas• Los bloqueos impiden los conflictos de

actualización– Las transacciones están serializadas– El bloqueo es automático– Los bloqueos permiten usar los datos al

mismo tiempo• Control de simultaneidad

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 229: BHPTraining SQLServer2000 Programadores 2

Administración de las transacciones• Presentación multimedia: Transacciones de

SQL Server• Recuperación de transacciones y puntos de

comprobación• Consideraciones para el uso de transacciones• Establecimiento de la opción de transacciones

implícitas• Restricciones en las transacciones definidas por el usuario

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 230: BHPTraining SQLServer2000 Programadores 2

Recuperación de transacciones y puntos de comprobación Recuperación de transacciones Acción requerida

Ninguna

Puntos de comprobación Fallo del sistema

1

2

3

4

5

Confirmar

Deshacer

Confirmar

Deshacer

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 231: BHPTraining SQLServer2000 Programadores 2

Consideraciones para el uso de transacciones• Recomendaciones para las transacciones

– Las transacciones deben ser lo más cortas posible

– Preste atención a ciertas instrucciones Transact-SQL

– Evite las transacciones que requieran la intervención del usuario

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 232: BHPTraining SQLServer2000 Programadores 2

Consideraciones para el uso de transacciones• Aspectos del anidamiento de transacciones

– Se pueden anidar transacciones, pero no se recomienda

– Utilice @@trancount para determinar el nivel de anidamiento

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 233: BHPTraining SQLServer2000 Programadores 2

Establecimiento de la opción de transacciones implícitas

• Una transacción se inicia automáticamente cuando se ejecutan determinadas instrucciones

• No se permiten transacciones anidadas• La transacción debe completarse explícitamente con

COMMIT o ROLLBACK TRANSACTION• De forma predeterminada, esta opción está

desactivadaSET IMPLICIT_TRANSACTIONS ON

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 234: BHPTraining SQLServer2000 Programadores 2

ALTER DATABASE BACKUP LOG CREATE DATABASE DROP DATABASE

RECONFIGURE RESTORE DATABASE RESTORE LOG UPDATE STATISTICS

Restricciones en las transacciones definidas por el usuario• Ciertas instrucciones no se pueden incluir

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 235: BHPTraining SQLServer2000 Programadores 2

Bloqueos en SQL Server• Problemas de simultaneidad impedidos por

los bloqueos• Recursos que se pueden bloquear• Tipos de bloqueos• Compatibilidad de los bloqueos

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 236: BHPTraining SQLServer2000 Programadores 2

Problemas de simultaneidad impedidos por los bloqueos• Actualización perdida• Dependencia no confirmada (lectura no confirmada)• Análisis incoherente (lectura no repetible)• Lecturas fantasma

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 237: BHPTraining SQLServer2000 Programadores 2

Recursos que se pueden bloquear Elemento Descripción

RID Identificador de fila

ClaveBloqueo de fila dentro de un índice

Página

Extensión

Tabla

Página de datos o página de índice

Grupo de páginas

Tabla completa

Base dedatos

Base de datos completa

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 238: BHPTraining SQLServer2000 Programadores 2

Tipos de bloqueos• Bloqueos básicos

– Compartidos– Exclusivos

• Bloqueos para situaciones especiales– Intención– Actualización– Esquema– Actualización masiva

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 239: BHPTraining SQLServer2000 Programadores 2

Compatibilidad de los bloqueos• Los bloqueos pueden ser compatibles o incompatibles con

otros bloqueos• Ejemplos

– Los bloqueos compartidos son compatibles con todos los bloqueos excepto con los exclusivos

– Los bloqueos exclusivos no son compatibles con ningún otro bloqueo

– Los bloqueos de actualización son compatibles sólo con los bloqueos compartidos

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 240: BHPTraining SQLServer2000 Programadores 2

• Opciones de bloqueo en el nivel de sesión• Arquitectura de bloqueos dinámicos• Opciones de bloqueo en el nivel de tabla• Interbloqueos• Presentación de información acerca de los bloqueos

Administración de los bloqueos

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 241: BHPTraining SQLServer2000 Programadores 2

Opciones de bloqueo en el nivel de sesión• Nivel de aislamiento de las transacciones

– READ COMMITTED (DEFAULT)– READ UNCOMMITTED– REPEATABLE READ– SERIALIZABLE

• Tiempo de espera para los bloqueos– Limita el tiempo de espera para un recurso

bloqueado– Use SET LOCK_TIMEOUT

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 242: BHPTraining SQLServer2000 Programadores 2

Arquitectura de bloqueos dinámicosBloqueodinámico

TablaPáginaFila

Costo

Granularidad

Costo de bloqueoCosto de simultaneidad

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 243: BHPTraining SQLServer2000 Programadores 2

Opciones de bloqueo en el nivel de tabla• Úselas con precaución• Puede especificar una o más opciones de bloqueo

para una tabla• Utilice la parte sugerenciasDeOptimizador de la

cláusula FROM de las instrucciones SELECT o UPDATE

• Suplanta las opciones de bloqueo en el nivel de sesión

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 244: BHPTraining SQLServer2000 Programadores 2

Interbloqueos• Cómo SQL Server termina los interbloqueos• Cómo minimizar los interbloqueos• Cómo personalizar la configuración de tiempo

de espera de bloqueo

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 245: BHPTraining SQLServer2000 Programadores 2

Presentación de información acerca de los bloqueos

• Ventana Actividad actual• Procedimiento almacenado de sistema sp_lock• Analizador de SQL• Monitor de sistema de Windows 2000• Información adicional

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 246: BHPTraining SQLServer2000 Programadores 2

Procedimientos recomendados

Mantenga las transacciones lo más cortas posible

Diseñe las transacciones para minimizar los interbloqueos

Utilice las opciones de bloqueo predeterminadas de SQL Server

Administración de transacciones y bloqueos

Tenga cuidado cuando utilice las opciones de bloqueo

Administración de transacciones y bloqueos

Page 247: BHPTraining SQLServer2000 Programadores 2

Práctica

SQL Server 2000

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos

Page 248: BHPTraining SQLServer2000 Programadores 2

Repaso• Introducción a las transacciones y los bloqueos• Administración de las transacciones• Bloqueos en SQL Server• Administración de los bloqueos

Administración de transacciones y bloqueosAdministración de transacciones y bloqueos