You are on page 1of 248

Programacin en SQL Server 2000

Recibiendo Datos
Introduccin
Recibiendo Datos usando la sentencia SELECT
Filtrando Datos
Formateando un Set de Resultados
Cmo son procesadas las consultas
Consideraciones de rendimiento
Recibiendo Datos
Recibiendo Datos usando la sentencia SELECT
Uso de la sentencia SELECT
Especificacin de Columnas
Usando la clusula WHERE para especificar Filas.

Recibiendo Datos
SELECT [ALL | DISTINCT] <select_list>
FROM {<table_source>} [,n]
WHERE <search_condition>
Sintaxis Parcial
Usando la sentencia SELECT
SELECT lista las columnas especificadas
La clusula WHERE especifica la restriccin a nivel de
filas
La clusula FROM especifica el origen de datos
(Tabla)
Recibiendo Datos
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 northwind
SELECT employeeid, lastname, firstname, title
FROM employees
GO
Recibiendo Datos
Usando la clusula WHERE para especificar filas
employeeid lastname firstname title
5 Buchanan Steven Sales Manager
USE northwind
SELECT employeeid, lastname, firstname, title
FROM employees
WHERE employeeid = 5
GO
Recibiendo Datos
Filtrando Datos
Usando operadores de comparacin
Usando String de comparacin
Usando operadores lgicos
Recibiendo un rango de valores
Usando una lista de valores como criterio de
busqueda
Recibiendo valores desconocidos
Recibiendo Datos
Usando operadores de comparacin
USE northwind
SELECT lastname, city
FROM employees
WHERE country = 'USA'
GO
lastname city
Davolio Seattle
Fuller Tacoma
Leverling Kirkland
Peacock Redmond
Callahan Seattle
Ejemplo 1
Recibiendo Datos
Usando String de comparacin
USE northwind
SELECT companyname
FROM customers
WHERE companyname LIKE '%Restaurant%'
GO
companyname
GROSELLA-Restaurante
Lonesome Pine Restaurant
Tortuga Restaurante
Recibiendo Datos
Usando comparadores lgicos
USE northwind
SELECT 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 Thringer Rostbratwurst 12 123.79
62 Tarte au sucre 29 49.3
Ejemplo 1
Recibiendo Datos
Recibiendo un rango de valores
USE northwind
SELECT productname, unitprice
FROM products
WHERE unitprice BETWEEN 10 AND 20
GO
productname unitprice
Chai 18
Chang 19
Aniseed Syrup 10
Genen Shouyu 15.5
Pavlova 17.45
Sir Rodneys Scones 10

Ejemplo 1
Recibiendo Datos
USE northwind
SELECT companyname, country
FROM suppliers
WHERE country IN ('Japan', 'Italy')
GO
Usando una lista de valores como criterio de
busqueda
companyname country
Tokyo Traders Japan
Mayumis Japan
Formaggi Fortini s.r.l. Italy
Pasta Buttini s.r.l. Italy
Ejemplo 1
Recibiendo Datos
Recibiendo valores desconocidos
USE northwind
SELECT companyname, fax
FROM suppliers
WHERE fax IS NULL
GO
companyname fax
Exotic Liquids NULL
New Orleans Cajun Delights NULL
Tokyo Traders NULL
Cooperativa de Quesos Las Cabras NULL

Recibiendo Datos
Formateando el resultado
Ordenando los datos
Eliminando filas duplicadas
Cambiando nombres de las columnas
Usando literales
Recibiendo Datos
Ordenando Datos
USE northwind
SELECT productid, productname, categoryid, unitprice
FROM products
ORDER BY categoryid, unitprice DESC
GO
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
Eliminando Filas duplicadas
USE northwind
SELECT DISTINCT country
FROM suppliers
ORDER BY country
GO
country
Australia
Brazil
Canada
Denmark
Finland
France
Germany
Italy
Japan
Netherlands
Norway
Singapore
Spain
Sweden
UK
USA
Example 1
Recibiendo Datos
Cambiando nombres de las columnas
USE northwind
SELECT firstname AS First, lastname AS Last
,employeeid AS 'Employee ID:'
FROM employees
GO
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
Usando literales
USE northwind
SELECT firstname, lastname
,'Identification number:', employeeid
FROM employees
GO
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
Cmo son procesadas las consultas
Uncached Queries (Ad Hoc)
Cached Queries
Execute Compile Optimize Resolve Parse
First Execution
Execute Compile Optimize Resolve Parse
Subsequent Execution
Execute
Procedure
Cache
Recibiendo Datos
Cmo son cacheadas automticamente las
consultas
USE northwind
SELECT * FROM products WHERE unitprice = $12.5
SELECT * FROM products WHERE unitprice = 12.5
SELECT * FROM products WHERE unitprice = $12.5
GO
USE library
SELECT * FROM member WHERE member_no = 7890
SELECT * FROM member WHERE member_no = 1234
SELECT * FROM member WHERE member_no = 7890
GO

Ad Hoc Batches



Auto-Parameterization
Recibiendo Datos
Consideraciones de Rendimiento
Las consultas sin ser especficas van a ser mas lentas.
Full Scan.
Busquedas LIKE relentizan la recuperacin
Coincidencias exactas o rangos mejoran velocidad de
recuperacin de datos
Clusula ORDER BY puede ralentizar la recuperacin
de datos
Recibiendo Datos
Procedimientos recomendados
Usar la clusula 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 lnea multi-columna, coloque una coma antes de la
Nombres de columna, con excepcin de la primera columna
Recibiendo Datos
Prctica
SQL Server
2000
Recibiendo Datos
Repaso
Obtener datos usando la setencia SELECT
Filtrando Datos
Formateando un set de resultados
Cmo se procesar las consultas
Consideraciones de Rendimiento
Recibiendo Datos
Agrupando y sumarizando datos
Introduccin
TOP n
Usando funciones de agregacin
GROUP BY
Generando valores agregados en los
resultados
Usando clusulas COMPUTE y COMPUTE BY
Agrupando y sumarizando datos
TOP n
Lista slo las primeras n filas
Especifica el rango de valores en las clusula
ORDER BY
Returns Ties if WITH TIES Is Used
USE northwind
SELECT TOP 5 orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
GO
USE northwind
SELECT TOP 5 WITH TIES orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
GO
Ejemplo 1
Ejemplo 2
Agrupando y sumarizando datos
Usando funciones de agrupacin
Funcin Agrupacin Descripcin
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
Usando funciones agregadas con valores Null
Las funciones de agregacin ignoran los valores null
COUNT(*) cuenta las filas con valores null
USE northwind
SELECT COUNT (*)
FROM employees
GO
USE northwind
SELECT COUNT(reportsto)
FROM employees
GO
Ejemplo 1
Ejemplo 2
Agrupando y sumarizando datos
GROUP BY
Usando la clusula GROUP BY
Usando la clusula GROUP BY con HAVING
Agrupando y sumarizando datos
USE northwind
SELECT productid
,SUM(quantity) AS total_quantity
FROM orderhist
WHERE productid = 2
GROUP BY productid
GO
Usando la clusula GROUP BY
USE northwind
SELECT productid, orderid
,quantity
FROM orderhist
GO
USE northwind
SELECT productid
,SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid
GO
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
Slo las filas que
satisfacen la
clusula WHERE
Agrupando y sumarizando datos
Usando la clusula GROUP BY con HAVING
USE northwind
SELECT productid, orderid
,quantity
FROM orderhist
GO
USE northwind
SELECT productid, SUM(quantity)
AS total_quantity
FROM orderhist
GROUP BY productid
HAVING SUM(quantity)>=30
GO
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
Generando valores agrupados en los resultados
Usando GROUP By con el operador ROLLUP
Usando GROUP By con el operador CUBE
Usando la funcin GROUPING
Agrupando y sumarizando datos
Usando GROUP By con el operador ROLLUP
USE northwind
SELECT productid, orderid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH ROLLUP
ORDER BY productid, orderid
GO
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
Usando GROUP By con el operador CUBE
El operador CUBE
produce dos
resumenes ms
de valores que
el operador ROLLUP
USE northwind
SELECT productid, orderid, SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH CUBE
ORDER BY productid, orderid
GO
Descripcin
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
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 funcin GROUPING
SELECT productid, GROUPING (productid)
,orderid, GROUPING (orderid)
,SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productid, orderid
WITH CUBE
ORDER BY productid, orderid
GO
productid
NULL
NULL
NULL
1
1
1
2
2
2
3
3
3
1
1
1
0
0
0
0
0
0
0
0
0
orderid
NULL
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
COMPUTE BY
COMPUTE
USE northwind
SELECT productid, orderid, quantity
FROM orderhist
ORDER BY productid, orderid
COMPUTE SUM(quantity) BY productid
COMPUTE SUM(quantity)
GO
USE northwind
SELECT productid, orderid
,quantity
FROM orderhist
ORDER BY productid, orderid
COMPUTE 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 funcin GROUPING
Agrupando y sumarizando datos
Procedimientos recomendados
Indexar con frecuencia las columnas agregadas
Evite el uso de funciones agregadas con valores nulos
Utilice la clusula ORDER BY para garantizar un orden
Utilice el operador ROLLUP con la clusula CUBE
Agrupando y sumarizando datos
Prctica
SQL Server
2000
Agrupando y sumarizando datos
Revisin
TOP n
Usando funciones de agregacin
Fundamentos de GROUP BY
Generar valores de agregacin en los resultados
Usando la clusula COMPUTE y COMPUTE BY
Agrupando y sumarizando datos
Uniendo multiples tablas
Introduccin
Usando Alias para nombrar tablas
Combinando datos de mltiples tablas
Combinando mltiples resultados
Uniendo mltiples tablas
Usando Alias para nombrar tablas
Ejemplo 1 (sin alias)



Ejemplo 2 (con alias)
USE joindb
SELECT buyer_name, s.buyer_id, qty
FROM buyers AS b INNER JOIN sales AS s
ON b.buyer_id = s.buyer_id
GO
USE joindb
SELECT buyer_name, sales.buyer_id, qty
FROM buyers INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id
GO
Uniendo mltiples tablas
Combinando datos de mltiples tablas
Introduccin a los JOIN
Inner Joins
Outer Joins
Cross Joins
Join con ms de dos tablas
Join de una tabla con ella misma
Uniendo mltiples tablas
Introduccin 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 condicin de reunin
Consulta dos o ms tablas para generar un
resultado
Usar PK y FK como condicin de la reunin
Usar columnas en comn durante
la reunin
Uniendo mltiples tablas
USE joindb
SELECT buyer_name, sales.buyer_id, qty
FROM buyers INNER JOIN sales
ON buyers.buyer_id = sales.buyer_id
GO


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 OMelia
buyer_id
1
2
3
4
Result
buyer_name
Adam Barr
Adam Barr
Erin OMelia
Eva Corets
buyer_id qty
1
1
4
3
15
5
37
11
Erin OMelia 4 1003
Ejemplo 1
Usando Join
Uniendo mltiples tablas
USE joindb
SELECT buyer_name, sales.buyer_id, qty
FROM buyers LEFT OUTER JOIN sales
ON buyers.buyer_id = sales.buyer_id
GO
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 OMelia
buyer_id
1
2
3
4
Resultado
buyer_name
Adam Barr
Adam Barr
Erin OMelia
Eva Corets
buyer_id qty
1
1
4
3
15
5
37
11
Erin OMelia 4 1003
Sean Chai NULL NULL
Ejemplo 1
Usando Outer Joins
Uniendo mltiples tablas
USE joindb
SELECT buyer_name, qty
FROM buyers
CROSS JOIN sales
GO
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 OMelia
Ejemplo 1
Usando Cross Joins
Uniendo mltiples tablas
Reuniendo ms de dos Tablas
SELECT 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_id
GO
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 OMelia
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 OMelia
Adam Barr
Erin OMelia
Adam Barr
Eva Corets
prod_name
Apples
Pears
Pears
Oranges
Peaches
qty
37
15
1003
5
11
Ejemplo 1
Uniendo mltiples tablas
Reuniendo una tabla con ella misma
USE joindb
SELECT 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_id
WHERE a.buyer_id > b.buyer_id
GO
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 mltiples tablas
Combinando mltiples resultados
Use el operador UNION para crear resultados
de multiples consultas
Para cada consulta Ud. debera:
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 northwind
SELECT (firstname + ' ' + lastname) AS name
,city, postalcode
FROM employees
UNION
SELECT companyname, city, postalcode
FROM customers
GO
Uniendo mltiples tablas
Procedimientos recomendados
Reunir tablas utilizando la PK y las FK
Referenciar todas las columnas que componene la PK en la
clusula ON cuando la clave es compuesta
Limitar el nro de tablas en un JOIN
Uniendo mltiples tablas
Prctica
SQL Server
2000
Uniendo mltiples tablas
Repaso
Usar Alias para los nombres de las tablas
Combinando datos de multiples tablas
Combinando mltiples resultados
Uniendo mltiples tablas
Trabajando con Subconsultas
Introduccin
Introduccin a subconsultas
Usando una subconsulta como una tablas derivada
Usando una subconsulta como una expresin
Usando una subconsulta para datos correlativos
Usando EXISTS y NOT EXISTS
Trabajando con Subconsultas
Introduccin a subconsultas
Porque usar subconsultas
Para disminuir lo complejo de una
consulta y dividirla en una serie lgica
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 rpido los JOIN
que las subconsultas
Cmo usar subconsultas
Trabajando con Subconsultas Trabajando con Subconsultas
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 clusula
FROM
Esta optimizado con el resto de la consulta
USE northwind
SELECT T.orderid, T.customerid
FROM ( SELECT orderid, customerid
FROM orders ) AS T
GO
Trabajando con Subconsultas Trabajando con Subconsultas
Usando una subconsulta como una expresin
Es evaluada y tratada como una expresin
Es ejecutada junto con la consulta principal
USE pubs
SELECT 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 Subconsultas Trabajando con Subconsultas
Usando una subconsulta para datos correlativos
Evaluando subconsultas correlativas
Imitando una clusula JOIN
Imitando una clusula HAVING
Trabajando con Subconsultas Trabajando con Subconsultas
Evaluando una consulta correlativa
Back to Step 1
USE northwind
SELECT 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 Subconsultas Trabajando con Subconsultas
Imitando una clusula JOIN
Las subconsultas correlacionadas pueden producir el
mismo resultado que una clusula JOIN
Deja al optimizador de consultas para determinar
cmo se correlacionan los datos de manera ms
eficiente

USE pubs
SELECT 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 Subconsultas Trabajando con Subconsultas
Imitando una clusula HAVING
Subconsulta con el mismo resultado que una
clusula HAVING



Usando la clusula HAVING sin una subconsulta
USE pubs
SELECT 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 pubs
SELECT 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 Subconsultas Trabajando con Subconsultas
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 northwind
SELECT 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 Subconsultas Trabajando con Subconsultas
Procedimientos recomendados
Utilice subconsultas para romper una compleja consulta
Utilice alias para las tablas en las Subconsultas correlacionadas
Utilice el comando INSERTSELECT Para aadir filas de otras
fuentes a una tabla existente
Utilice el operador EXISTS en lugar del operador IN
Trabajando con Subconsultas Trabajando con Subconsultas
Prctica
SQL Server
2000
Trabajando con Subconsultas Trabajando con Subconsultas
Repaso
Introduccin a las subconsultas
Usando una subconsulta como una tabla derivada
Usando una subconsulta como una expresion
Usando una subconsulta con datos correlativos
Usando clusulas EXISTS y NOT EXISTS
Trabajando con Subconsultas Trabajando con Subconsultas
Modificando Datos
Introduccin
Usando Transacciones
Insertando Datos
Borrando Datos
Actualizando Datos
Consideraciones de rendimiento
Modificando Datos
Usando Transacciones
Comienzo de
Transacciones
Explcitas
Autocommit
Implcitas

Final de la Transaccin
COMMIT
ROLLBACK
BEGIN TRANSACTION
UPDATE savings
. . .
UPDATE checking
. . .
COMMIT TRANSACTION
Modificando Datos Modificando Datos
Insertando Datos
Insertando una fila de datos por valor
Usando sentencias INSERTSELECT
Creacin de una tabla usando la sentencia SELECT
INTO
Insertando Datos parciales
Insertando datos utilizando columnas por defecto
Modificando Datos Modificando Datos
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 northwind
INSERT 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 Datos Modificando Datos
USE northwind
INSERT customers
SELECT substring(firstname, 1, 3)
+ substring (lastname, 1, 2)
,lastname, firstname, title, address, city
,region, postalcode, country, homephone, NULL
FROM employees
GO
Usando la sentencia INSERTSELECT
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 Datos Modificando Datos
Creacin 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 tabla
USE northwind
SELECT productname AS products
,unitprice AS price
,(unitprice * 1.1) AS tax
INTO #pricetable
FROM products
GO
Modificando Datos Modificando Datos
Insertando Datos Parciales
USE northwind
INSERT shippers (companyname)
VALUES ('Fitch & Mather')
GO
Agregando Datos
USE northwind
SELECT *
FROM shippers
WHERE companyname = 'Fitch & Mather'
GO
Verificando Datos nuevos
shipperid
37
companyname
Fitch & Mather
phone
Null
Permite Valores Null
Ejemplo 1
Ejemplo 2
Modificando Datos Modificando Datos
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 northwind
INSERT shippers (companyname, phone)
VALUES ('Kenya Coffee Co.', DEFAULT)
GO
Modificando Datos Modificando Datos
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 Datos Modificando Datos
Eliminando Datos
Uso de la sentencia DELETE
Usando la sentencia TRUNCATE TABLE
Eliminando filas basndose en otrsa tablas
Modificando Datos Modificando Datos
Uso de la sentencia DELETE
La sentencia DELETE remueve una o mas filas
in una tabla teniendo en cuenta la clusula
WHERE y su condicin.
Cada fila eliminada es cargada en el
transaction log
USE northwind
DELETE orders
WHERE DATEDIFF(MONTH, shippeddate, GETDATE()) >= 6
GO
Modificando Datos Modificando Datos
USE northwind
TRUNCATE TABLE orders
GO
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
Slo los puntos a las pginas de memoria son
almacenados en el transaction log
Modificando Datos Modificando Datos
Eliminacin de Datos basndose en otras tablas
Usando una clusula FROM adicional
La primera clusula FROM indica la tabla a
modificar
La segunda clusula FROM especifica el
criterio de restriccin de la sentencia DELETE
Especificar condiciones en la clusula WHERE
La subconsulta especifica cuales filas se
eliminarn
Modificando Datos Modificando Datos
Actualizando Datos
Actualizando filas basndose en datos y de
una tabla
Actualizando filas basndose en otras tablas
Modificando Datos Modificando Datos
USE northwind
UPDATE products
SET unitprice = (unitprice * 1.1)
GO
Actualizando filas basndose en datos y de una tabla
La clusula 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 actualizacin no se lleva adelante en filas que
violan alguna regla de integridad
Modificando Datos Modificando Datos
Actualizando filas basndose en otras tablas
Cmo 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 clusula FROM
Especificand filas para actualizar usando
Subconsultas
Modificando Datos Modificando Datos
Consideraciones de Rendimiento
Todas las modificaciones de datos ocurren en
una misma transaccin
Data Page Allocation
El modificar datos indexados incrementar el
Overhead
Los indices pueden asistir en el criteria de
busqueda
Modificando Datos Modificando Datos
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 clusula WHERE cuando se utilizan las
sentencias DELETE o UPDATE
Modificando Datos Modificando Datos
Prctica
SQL Server
2000
Modificando Datos Modificando Datos
Revisin
Usando Transacciones
Insertando Datos
Eliminando Datos
Actualizando Datos
Consideraciones de Rendimiento
Modificando Datos Modificando Datos
Implementacin de procedimientos
almacenados
Introduccin a los procedimientos almacenados
Creacin, ejecucin, modificacin y eliminacin de
procedimientos almacenados
Utilizacin de parmetros en los procedimientos
almacenados
Ejecucin de procedimientos almacenados
extendidos
Control de mensajes de error
Consideraciones acerca del rendimiento
Introduccin
Implementacin de procedimientos
almacenados
Definicin de procedimientos almacenados
Procesamiento inicial de los procedimientos
almacenados
Procesamientos posteriores de los procedimientos
almacenados
Ventajas de los procedimientos almacenados
Introduccin a los procedimientos almacenados
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Definicin 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 parmetros de entrada y devolver valores
Devolver valores de estado para indicar que se ha
ejecutado satisfactoriamente o se ha producido
algn error
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Procesamiento inicial de los procedimientos
almacenados
Se almacena en las tablas
sysobjects y syscomments
El plan compilado se
coloca en la cach de
procedimientos
Compilacin
Optimizacin
Creacin
Ejecucin
(por primera vez
o recompilacin)

Anlisis

Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Procesamientos posteriores de los procedimientos
almacenados
Plan de ejecucin recuperado
Plan sin usar se retira
Plan de consulta Contexto de ejecucin
SELECT *
FROM dbo.member
WHERE member_no =
?
Conexin 1
8082
Conexin 2
Conexin 3
24
1003
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Ventajas de los procedimientos almacenados
Compartir la lgica de la aplicacin
Exposicin de los detalles de las tablas de la
base de datos
Proporcionar mecanismos de seguridad
Mejorar el rendimiento
Reducir el trfico de red
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Creacin, ejecucin y modificacin de
procedimientos almacenados
Creacin de procedimientos almacenados
Recomendaciones para la creacin de
procedimientos almacenados
Ejecucin de procedimientos almacenados
Modificacin y eliminacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Creacin de procedimientos almacenados
Utilice la instruccin CREATE PROCEDURE para
crearlos en la base de datos activa





Puede anidar hasta 32 niveles
Use sp_help para mostrar informacin
USE Northwind
GO
CREATE PROC dbo.OverdueOrders
AS
SELECT *
FROM dbo.Orders
WHERE RequiredDate < GETDATE() AND ShippedDate IS Null
GO
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Recomendaciones para la creacin 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
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Recomendaciones para la creacin de
procedimientos almacenados
Utilice la misma configuracin de conexin
para todos los procedimientos almacenados
Reduzca al mnimo la utilizacin de
procedimientos almacenados temporales
No elimine nunca directamente las entradas
de Syscomments
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Ejecucin de procedimientos almacenados
Ejecucin de un procedimiento almacenado
por separado



Ejecucin de un procedimiento almacenado
en una instruccin INSERT
EXEC OverdueOrders

INSERT INTO Customers
EXEC EmployeeCustomer

Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Alteracin y eliminacin de procedimientos almacenados
Modificacin de procedimientos almacenados
Incluya cualquiera de las opciones en ALTER
PROCEDURE
No afecta a los procedimientos almacenados
anidados
Eliminacin de procedimientos almacenados
Ejecute el procedimiento almacenado sp_depends
para determinar si los objetos dependen
del procedimiento almacenado
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Alteracin y eliminacin de procedimientos
almacenados
Modificacin de procedimientos almacenados
Eliminacin de procedimientos almacenados
Ejecute el procedimiento almacenado sp_depends
para determinar si los objetos dependen del
procedimiento almacenado
USE Northwind
GO
ALTER PROC dbo.OverdueOrders
AS
SELECT CONVERT(char(8), RequiredDate, 1) RequiredDate,
CONVERT(char(8), OrderDate, 1) OrderDate,
OrderID, CustomerID, EmployeeID
FROM Orders
WHERE RequiredDate < GETDATE() AND ShippedDate IS Null
ORDER BY RequiredDate
GO
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Prctica: Creacin de Procedimientos
Almacenados
SQL Server
2000
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Utilizacin de parmetros en los procedimientos
almacenados
Utilizacin de parmetros de entrada
Ejecucin de procedimientos almacenados con
parmetros de entrada
Devolucin de valores mediante parmetros de
salida
Volver a compilar explcitamente procedimientos
almacenados
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Utilizacin de parmetros de entrada
Valide primero todos los valores de los parmetros
de entrada
Proporcione los valores predeterminados
apropiados e incluya las comprobaciones de Null
CREATE PROCEDURE dbo.[Year to Year Sales]
@BeginningDate DateTime, @EndingDate DateTime
AS
IF @BeginningDate IS NULL OR @EndingDate IS NULL
BEGIN
RAISERROR('NULL values are not allowed', 14, 1)
RETURN
END
SELECT O.ShippedDate,
O.OrderID,
OS.Subtotal,
DATENAME(yy,ShippedDate) AS Year
FROM ORDERS O INNER JOIN [Order Subtotals] OS
ON O.OrderID = OS.OrderID
WHERE O.ShippedDate BETWEEN @BeginningDate AND @EndingDate
GO
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Ejecucin de procedimientos almacenados con
parmetros de entrada
Paso de valores por el nombre del parmetro






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'
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Ejecucin de procedimientos almacenados con
parmetros de entrada
Paso de valores por posicin
EXEC AddCustomer 'ALFKI2', 'Alfreds
Futterkiste', 'Maria Anders', 'Sales
Representative', 'Obere Str. 57', 'Berlin',
NULL, '12209', 'Germany', '030-0074321'
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Devolucin de valores mediante parmetros de
salida
CREATE PROCEDURE dbo.mathtutor
@m1 smallint,
@m2 smallint,
@result smallint OUTPUT
AS
SET @result = @m1* @m2
GO
DECLARE @answer smallint
EXECUTE mathtutor 5, 6, @answer OUTPUT
SELECT 'The result is: ' , @answer


The result is: 30
Resultados del
procedimiento
almacenado
Ejecucin del
procedimiento
almacenado
Creacin del
procedimiento
almacenado
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Volver a compilar explcitamente procedimientos
almacenados
Volver a compilar cuando
El procedimiento almacenado devuelve
conjuntos de resultados que varan
considerablemente
Se agrega un nuevo ndice a una tabla
subyacente
El valor del parmetro es atpico
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Volver a compilar explcitamente procedimientos
almacenados
Volver a compilar mediante
CREATE PROCEDURE [WITH RECOMPILE]
EXECUTE [WITH RECOMPILE]
sp_recompile
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Ejecucin de procedimientos almacenados
extendidos
Se programan con la API Servicios abiertos de
datos
Pueden incluir caractersticas de C y C++
Pueden contener mltiples funciones
Se pueden llamar desde un cliente o desde SQL
Server
Se pueden agregar slo a la base de datos master

EXEC master..xp_cmdshell 'dir c:\'
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Control de mensajes de error
La instruccin RETURN sale incondicionalmente de
una consulta o procedimiento
sp_addmessage crea mensajes de error
personalizados
@@error contiene el nmero de error de la
instruccin ejecutada ms recientemente
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Control de mensajes de error
Instruccin RAISERROR
Devuelve un mensaje de error del sistema
definido por el usuario
Establece un indicador del sistema para
registrar un error
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Consideraciones acerca del rendimiento
Monitor de sistema de Windows 2000
Objeto: SQL Server: Administrador de cach
Objeto: Estadsticas de SQL
Analizador de SQL
Puede supervisar eventos
Puede probar cada instruccin en un
procedimiento almacenado
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Procedimientos recomendados
Compruebe los parmetros de entrada
Disee cada procedimiento almacenado para realizar una nica
tarea
Valide los datos antes de comenzar las transacciones
Implementacin de procedimientos
almacenados
Utilice la misma configuracin de conexin para todos los
procedimientos almacenados
Use WITH ENCRYPTION para ocultar texto de los procedimientos
almacenados
Implementacin de procedimientos
almacenados
Prctica
SQL Server
2000
Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Repaso
Introduccin a los procedimientos almacenados
Creacin, ejecucin, modificacin y eliminacin de
procedimientos almacenados
Utilizacin de parmetros en los procedimientos
almacenados
Ejecucin de procedimientos almacenados
extendidos
Control de mensajes de error
Consideraciones acerca del rendimiento

Implementacin de procedimientos
almacenados
Implementacin de procedimientos
almacenados
Implementacin de funciones
definidas por el usuario
Introduccin
Qu es una funcin definida por el usuario?
Definicin de funciones definidas por el usuario
Ejemplos de funciones definidas por el usuario
Implementacin de funciones
definidas por el usuario
Qu es una funcin definida por el usuario?
Funciones escalares
Similar a una funcin 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 lnea
Similar a una vista con parmetros
Devuelve una tabla como el resultado de una
instruccin SELECT nica
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Definicin de funciones definidas por el usuario
Creacin de una funcin definida por el usuario
Creacin de una funcin con enlace a esquema
Establecimiento de permisos para funciones
definidas por el usuario
Modificacin y eliminacin de funciones definidas
por el usuario
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Creacin de una funcin definida por el usuario
USE Northwind
GO
CREATE FUNCTION fn_NewRegion
(@myinput nvarchar(30))
RETURNS nvarchar(30)
BEGIN
IF @myinput IS NULL
SET @myinput = 'Not Applicable'
RETURN @myinput
END
Creacin de una funcin




Restricciones de las funciones
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Creacin de una funcin con enlace a esquema
Todas las funciones definidas por el usuario y las
vistas a las que la funcin hace referencia tambin
estn enlazadas a esquema
No se utiliza un nombre de dos partes para los
objetos a los que hace referencia
La funcin y los objetos se encuentran todos en la
misma base de datos
Tiene permiso de referencia en los objetos
requeridos
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
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 funcin para utilizar la
instruccin CREATE o ALTER TABLE
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Modificacin y eliminacin de funciones definidas
por el usuario
Modificacin de funciones


Conserva los permisos asignados
Hace que la definicin de la funcin nueva
reemplace a la definicin existente
Eliminacin de funciones
ALTER FUNCTION dbo.fn_NewRegion
<New function content>
DROP FUNCTION dbo.fn_NewRegion
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Ejemplos de funciones definidas por el usuario
Uso de una funcin escalar definida por el
usuario
Ejemplo de una funcin escalar definida por
el usuario
Uso de una funcin con valores de tabla de
varias instrucciones
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Ejemplos de funciones definidas por el usuario
Ejemplo de una funcin con valores de tabla
de varias instrucciones
Uso de una funcin con valores de tabla en
lnea
Ejemplo de una funcin con valores de tabla
en lnea
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Uso de una funcin escalar definida por el usuario
La clusula RETURNS especifica el tipo de datos
La funcin se define en un bloque BEGIN y END
El tipo de devolucin puede ser cualquier tipo
de datos, excepto text, ntext, image, cursor o
timestamp
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Ejemplo de una funcin escalar definida por el
usuario
USE Northwind
GO
CREATE FUNCTION fn_DateFormat
(@indate datetime, @separator char(1))
RETURNS Nchar(20)
AS
BEGIN
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(), ':')
Creacin de la funcin




Llamada a la funcin
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Uso de una funcin con valores de tabla de varias
instrucciones
BEGIN y END contienen mltiples
instrucciones
La clusula RETURNS especifica el tipo de
datos de la tabla
La clusula RETURNS da nombre y define la
tabla
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Ejemplo de una funcin con valores de tabla de
varias instrucciones
Creacin de la funcin





Llamada a la funcin

USE Northwind
GO
CREATE FUNCTION fn_Employees (@length nvarchar(9))
RETURNS @fn_Employees TABLE
(EmployeeID int PRIMARY KEY NOT NULL,
[Employee Name] nvarchar(61) NOT NULL)
AS
BEGIN
IF @length = 'ShortName'
INSERT @fn_Employees SELECT EmployeeID, LastName
FROM Employees
ELSE IF @length = 'LongName'
INSERT @fn_Employees SELECT EmployeeID,
(FirstName + ' ' + LastName) FROM Employees
RETURN
END
SELECT * FROM dbo.fn_Employees('LongName')
- o bien -
SELECT * FROM dbo.fn_Employees('ShortName')
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Uso de una funcin con valores de tabla en
lnea
El contenido de la funcin es una instruccin
SELECT
No utilice BEGIN y END
RETURN especifica table como el tipo de datos
El formato se define por el conjunto de resultados
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Ejemplo de una funcin con valores de tabla en lnea
Creacin de la funcin




Llamada a la funcin mediante un parmetro
USE Northwind
GO
CREATE FUNCTION fn_CustomerNamesInRegion
( @RegionParameter nvarchar(30) )
RETURNS table
AS
RETURN (
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Region = @RegionParameter
)
SELECT * FROM fn_CustomerNamesInRegion(N'WA')
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Procedimientos recomendados
Utilice funciones escalares complejas con conjuntos de
resultados pequeos
Utilice funciones con varias instrucciones en lugar de
procedimientos almacenados que devuelven tablas
Utilice funciones en lnea para crear vistas parametrizadas
Implementacin de funciones
definidas por el usuario
Utilice funciones en lnea para filtrar vistas indizadas
Implementacin de funciones
definidas por el usuario
Prctica
SQL Server
2000
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Repaso
Qu es una funcin definida por el usuario?
Definicin de funciones definidas por el usuario
Ejemplos de funciones definidas por el usuario
Implementacin de funciones
definidas por el usuario
Implementacin de funciones
definidas por el usuario
Implementacin de
desencadenadores (triggers)
Introduccin
Introduccin a los desencadenadores
Definicin de desencadenadores
Funcionamiento de los desencadenadores
Ejemplos de desencadenadores
Consideraciones acerca del rendimiento
Implementacin de
desencadenadores (triggers)
Introduccin a los desencadenadores
Qu es un desencadenador?
Uso de los desencadenadores
Consideraciones acerca del uso de
desencadenadores
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Qu es un desencadenador?
Asociacin a una tabla
Invocacin automtica
Imposibilidad de llamada directa
Identificacin con una transaccin
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Uso de los desencadenadores
Cambios en cascada en tablas relacionadas de
una base de datos
Exigir una integridad de datos ms compleja que
una restriccin CHECK
Definicin de mensajes de error personalizados
Mantenimiento de datos no normalizados
Comparacin del estado de los datos antes y
despus de su modificacin
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
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
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
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 accin
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Definicin de desencadenadores
Creacin de desencadenadores
Alteracin y eliminacin de desencadenadores
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Creacin de desencadenadores
Necesidad de los permisos adecuados
Imposibilidad de incluir determinadas
instrucciones
Use Northwind
GO
CREATE TRIGGER Empl_Delete ON Employees
FOR DELETE
AS
IF (SELECT COUNT(*) FROM Deleted) > 1
BEGIN
RAISERROR(
'You cannot delete more than one employee at a time.', 16, 1)
ROLLBACK TRANSACTION
END
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Alteracin y eliminacin de desencadenadores
Alteracin de un desencadenador
Cambios en la definicin sin quitar el
desencadenador
Deshabilitacin o habilitacin de un
desencadenador




Eliminacin de un desencadenador
USE Northwind
GO
ALTER TRIGGER Empl_Delete ON Employees
FOR DELETE
AS
IF (SELECT COUNT(*) FROM Deleted) > 6
BEGIN
RAISERROR(
'You cannot delete more than six employees at a time.', 16, 1)
ROLLBACK TRANSACTION
END
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
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

Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Funcionamiento de un desencadenador INSERT
Instruccin INSERT en tabla con desencadenador
INSERT
INSERT [Order Details] VALUES
(10525, 2, 19.00, 5, 0.2)
Order Details
OrderID
10522
10523
10524
ProductID
10
41
7
UnitPrice
31.00
9.65
30.00
Quantity
7
9
24

Discount
0.2
0.15
0.0
19.00 2 0.2 10523 5
Instruccin INSERT registrada
inserted
10523 2 19.00 5 0.2
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Funcionamiento de un desencadenador INSERT
Instruccin INSERT en tabla con desencadenador
INSERT
INSERT [Order Details] VALUES
(10525, 2, 19.00, 5, 0.2)
Order Details
OrderID
10522
10523
10524
ProductID
10
41
7
UnitPrice
31.00
9.65
30.00
Quantity
7
9
24

Discount
0.2
0.15
0.0
19.00 2 0.2 10523 5
Instruccin INSERT registrada
inserted
10523 2 19.00 5 0.2
Ejecucin de acciones TRIGGER
Order Details
OrderID
10522
10523
10524
ProductID
10
41
7
UnitPrice
31.00
9.65
30.00
Quantity
7
9
24

Discount
0.2
0.15
0.0
5 19.00 2 0.2 10523
Trigger Code:
USE Northwind
CREATE TRIGGER OrdDet_Insert
ON [Order Details]
FOR INSERT
AS
UPDATE P SET
UnitsInStock = (P.UnitsInStock I.Quantity)
FROM Products AS P INNER JOIN Inserted AS I
ON P.ProductID = I.ProductID

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

15
10
65
20
1
2
3
4
Products
ProductID UnitsInStock
2 15
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Funcionamiento de un desencadenador INSERT
Instruccin INSERT en tabla con desencadenador
INSERT
Instruccin INSERT en una tabla con un
desencadenador INSERT

Instruccin INSERT registrada

Accin del desencadenador ejecutada
1
2
3
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Funcionamiento de un desencadenador DELETE
Instruccin DELETE en tabla con desencadenador DELETE
Deleted
4 Dairy Products Cheeses 0x15
Instruccin DELETE registrada
Categories
CategoryID
1
2
3
CategoryName
Beverages
Condiments
Confections
Description
Soft drinks, coffees
Sweet and savory
Desserts, candies,
Picture
0x15
0x15
0x15
0x15 Cheeses Dairy Products 4
DELETE Categories
WHERE
CategoryID = 4
USE Northwind
CREATE TRIGGER Category_Delete
ON Categories
FOR DELETE
AS
UPDATE P SET Discontinued = 1
FROM Products AS P INNER JOIN deleted AS d
ON P.CategoryID = d.CategoryID
Products
ProductID Discontinued
1
2
3
4
0
0
0
0
Accin del desencadenador ejecutada
2 1
UPDATE P SET Discontinued = 1
FROM Products AS P INNER JOIN deleted AS d
ON P.CategoryID = d.CategoryID
Instruccin DELETE en una tabla con un
desencadenador DELETE

Instruccin DELETE registrada

Accin del desencadenador ejecutada
1
2
3
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Funcionamiento de un desencadenador UPDATE
Instruccin UPDATE para una tabla con un desencadenador UPDATE
definido
UPDATE Employees
SET EmployeeID = 17
WHERE EmployeeID = 2
Instruccin UPDATE registrada como instrucciones INSERT y DELETE
Employees
EmployeeID LastName FirstName Title HireDate
1
2
3
4
Davolio
Barr
Leverling
Peacock
Nancy
Andrew
Janet
Margaret
Sales Rep.
R
Sales Rep.
Sales Rep.
~~~
~~~
~~~
~~~
2 Fuller Andrew Vice Pres. ~~~
insertada
17 Fuller Andrew Vice Pres. ~~~
eliminada
2 Fuller Andrew Vice Pres. ~~~
Ejecucin de acciones TRIGGER
USE Northwind
GO
CREATE TRIGGER Employee_Update
ON Employees
FOR UPDATE
AS
IF UPDATE (EmployeeID)
BEGIN TRANSACTION
RAISERROR ('Transaction cannot be processed.\
***** Employee ID number cannot be modified.', 10, 1)
ROLLBACK TRANSACTION
AS
IF UPDATE (EmployeeID)
BEGIN TRANSACTION
RAISERROR ('Transaction cannot be processed.\
***** Employee ID number cannot be modified.', 10, 1)
ROLLBACK TRANSACTION
No se puede procesar la transaccin.
***** No se puede modificar el nmero de miembro

Employees
EmployeeID LastName FirstName Title HireDate
1
2
3
4
Davolio
Barr
Leverling
Peacock
Nancy
Andrew
Janet
Margaret
Sales Rep.
R
Sales Rep.
Sales Rep.
~~~
~~~
~~~
~~~
2 Fuller Andrew Vice Pres. ~~~
Instruccin UPDATE en una tabla con un
desencadenador UPDATE

Instruccin UPDATE registrada como instrucciones
INSERT y DELETE

Accin del desencadenador ejecutada
1
2
3
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Funcionamiento de los desencadenadores anidados
UnitsInStock + UnitsOnOrder
es < ReorderLevel para ProductID 2
OrDe_Update
La realizacin de un pedido
provoca la ejecucin del
desencadenador
OrDe_Update

Se ejecuta la instruccin
UPDATE en la tabla Products
InStock_Update
Products
ProductID UnitsInStock
1

3
4
15
15
65
20
Se ejecuta el desencadenador
InStock_Update

Enva un mensaje
Order_Details
OrderID
10522
10523
10524
ProductID
10
41
7
UnitPrice
31.00
9.65
30.00
Quantity
7
9
24

Discount
0.2
0.15
0.0
10525 19.00 2 0.2 5
2 15
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Desencadenadores recursivos
Activacin recursiva de un desencadenador
Tipos de desencadenadores recursivos
Recursividad directa, que se da cuando un
desencadenador se ejecuta y realiza una accin
que lo activa de nuevo
Recursividad indirecta, que se da cuando un
desencadenador se activa y realiza una accin
que activa un desencadenador de otra tabla
Conveniencia del uso de los desencadenadores
recursivos
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Ejemplos de desencadenadores
Exigir la integridad de los datos
Exigir reglas de empresa
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Exigir la integridad de los datos
CREATE TRIGGER BackOrderList_Delete
ON Products FOR UPDATE
AS
IF (SELECT BO.ProductID FROM BackOrders AS BO JOIN
Inserted AS I ON BO.ProductID = I.Product_ID
) > 0
BEGIN
DELETE BO FROM BackOrders AS BO
INNER JOIN Inserted AS I
ON BO.ProductID = I.ProductID
END
Products
ProductID UnitsInStock
1

3
4
15
10
65
20
2 15
Actualizada
BackOrders
ProductID UnitsOnOrder
1
12
3
15
10
65
2 15
El desencadenador
elimina la fila
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Exigir reglas de empresa
Products
ProductID UnitsInStock
1
2
3
4
15
10
65
20
Los productos con pedidos pendientes no se pueden eliminar
IF (Select Count (*)
FROM [Order Details] INNER JOIN deleted
ON [Order Details].ProductID = deleted.ProductID
) > 0
ROLLBACK TRANSACTION
La instruccin DELETE se ejecuta
en la tabla Product
El cdigo del desencadenador
comprueba la tabla Order Details
Order Details
OrderID
10522
10523
10524
10525
ProductID
10
2
41
7
UnitPrice
31.00
19.00
9.65
30.00
Quantity
7
9
24

Discount
0.2
0.15
0.0
9
'No puede procesarse la transaccin'
'Este producto tiene historial de pedidos'
Se deshace
la transaccin
2 0
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Consideraciones acerca del rendimiento
Los desencadenadores trabajan rpidamente porque
las tablas insertadas y eliminadas estn en la cach
El tiempo de ejecucin est determinado por:
Nmero de tablas a las que se hace
referencia
Nmero de filas afectadas
Las acciones contenidas en un desencadenador
forman parte de una transaccin
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Procedimientos recomendados
Utilice desencadenadores slo cuando sea necesario
Procure que las instrucciones de la definicin de los
desencadenadores sean tan sencillas como sea posible
Incluya instrucciones de comprobacin de terminacin de la
recursividad en las definiciones de los desencadenadores
recursivos
Reduzca al mnimo el uso de instrucciones ROLLBACK en
los desencadenadores
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Prctica
SQL Server
2000
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Repaso
Introduccin a los desencadenadores
Definicin de desencadenadores
Funcionamiento de los desencadenadores
Ejemplos de desencadenadores
Consideraciones acerca del rendimiento
Implementacin de
desencadenadores (triggers)
Implementacin de
desencadenadores (triggers)
Optimizacin del rendimiento de las
consultas
Introduccin
Introduccin al optimizador de consultas
Obtencin de informacin del plan de ejecucin
Uso de un ndice para abarcar una consulta
Estrategias de indizacin
Suplantacin del optimizador de consultas
Optimizacin de las consultas
Introduccin al optimizador de consultas
Funcin del optimizador de consultas
Cmo utiliza el optimizador de consultas la
optimizacin basada en el costo
Cmo funciona el optimizador de consultas
Fases de la optimizacin de consultas
Almacenamiento en cach del plan de ejecucin
Establecimiento de un lmite de costo
Optimizacin de las consultas Optimizacin de las consultas
Funcin del optimizador de consultas
Determina el plan de ejecucin ms eficaz
Determinar la existencia de ndices y evaluar su
utilidad
Determinar los ndices o las columnas que se
pueden utilizar
Determinar cmo procesar las combinaciones
Uso de evaluacin basada en costos de alternativas
Creacin de estadsticas de columnas

Utiliza informacin adicional
Produce un plan de ejecucin
Optimizacin de las consultas Optimizacin de las consultas
Cmo utiliza el optimizador de consultas la
optimizacin basada en el costo
Limita el nmero de planes de optimizacin
El costo se estima en trminos de E/S y costo de
CPU
Determina el tiempo de procesamiento de las
consultas
Utilice operadores fsicos y secuencia de
operaciones
Utilice procesos paralelos y en serie
Optimizacin de las consultas Optimizacin de las consultas
Cmo funciona el optimizador de consultas
Proceso de anlisis
Proceso de estandarizacin
Optimizacin de la consulta
Compilacin
Rutinas de acceso a
bases de datos
Transact-SQL
Conjunto
de
resultados
Optimizacin de las consultas Optimizacin de las consultas
Fases de la optimizacin de consultas
Anlisis de la consulta
Identifica los criterios de bsqueda y combinacin
de la consulta
Seleccin de ndices
Determina si existe algn ndice
Produce una valoracin de la utilidad del ndice o
ndices
Seleccin de la combinacin
Evala qu estrategia de combinacin se va a
utilizar
Optimizacin de las consultas Optimizacin de las consultas
Almacenamiento en cach del plan de ejecucin
Almacenamiento de un plan de ejecucin en la
memoria
Una copia para todas las ejecuciones en serie
Otra copia para todas las ejecuciones en paralelo
Uso de un contexto de ejecucin
Se vuelve a utilizar un plan de ejecucin
existente,
si lo hay
Se genera un plan de ejecucin nuevo, si no
existe uno

Optimizacin de las consultas Optimizacin de las consultas
Almacenamiento en cach del plan de ejecucin
Recompilacin de planes de ejecucin
Los cambios en la base de datos pueden hacer
que el plan
de ejecucin sea ineficaz o deje de ser vlido

Optimizacin de las consultas Optimizacin de las consultas
Establecimiento de un lmite de costo
Especificacin de un lmite mximo
Utilice el regulador de consultas para evitar que se
ejecuten consultas que tarden mucho tiempo y
usen muchos recursos del sistema
Especificacin de lmites de conexin
Use el procedimiento almacenado sp_configure
Optimizacin de las consultas Optimizacin de las consultas
Establecimiento de un lmite de costo
Especificacin de lmites de conexin
Ejecute la instruccin SET
QUERY_GOVERNOR_COST_LIMIT
Especifique 0 para desactivar el regulador de
consultas
Optimizacin de las consultas Optimizacin de las consultas
Obtencin de informacin del plan de ejecucin
Presentacin de los resultados de las instrucciones
STATISTICS
Presentacin de los resultados de SHOWPLAN_ALL y
SHOWPLAN_TEXT
Presentacin grfica del plan de ejecucin
Optimizacin de las consultas Optimizacin de las consultas
Presentacin de los resultados de las instrucciones
STATISTICS
Instruccin Ejemplo de salida
STATISTICS
TIME
STATISTICS
PROFILE
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.
Optimizacin de las consultas Optimizacin de las consultas
Presentacin de los resultados de SHOWPLAN_ALL y
SHOWPLAN_TEXT
Estructura de los resultados de la instruccin
SHOWPLAN
Devuelven informacin en forma de un
conjunto de filas
Forman un rbol jerrquico
Representan los pasos realizados por el
optimizador de consultas
Muestran un clculo de cmo se optimiz una
consulta, no el plan de ejecucin real
Optimizacin de las consultas Optimizacin de las consultas
Presentacin de los resultados de SHOWPLAN_ALL y
SHOWPLAN_TEXT
Detalles de los pasos de ejecucin
Diferencia entre los resultados de
SHOWPLAN_TEXT y SHOWPLAN_ALL
Optimizacin de las consultas Optimizacin de las consultas
Presentacin grfica del plan de ejecucin
Elementos del plan de ejecucin grfico
Lectura de los resultados del plan de ejecucin
grfico
Uso de la operacin de consulta de marcadores
Optimizacin de las consultas Optimizacin de las consultas
Elementos del plan de ejecucin grfico
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 lgicos describen la operacin
algebraica relacional que se utiliza para procesar una
instruccin
Los operadores fsicos describen el algoritmo de
implementacin fsica que se utiliza para procesar
una instruccin

Optimizacin de las consultas Optimizacin de las consultas
Lectura de los resultados del plan de ejecucin
grfico
Plan de consulta

SELECT
Costo: 0%
Consulta de marcadores
Costo: 8%
Raz de
combinacin hash
Costo: 28%
Member.corp_no
Costo: 9%
Member.fname
Costo: 10%
Filtro
Costo: 0%
Secuencia de pasos
Bsqueda en ndice
Recorre un intervalo de filas en particular
desde un ndice no agrupado.

Operacin fsica:
Operacin lgica:
Cuenta de filas:
Tamao estimado de fila:
Costo de E/S:
Costo de CPU:
Nmero de ejecuciones:
Costo:
Costo del subrbol:
Bsqueda en ndice
Bsqueda en ndice
414
24
0,00706
0,000605
1,0
0,007675(6%)
0,00767
Argumento:
OBJECT: ([credit].[dbo].[member].[fname]),
SEEK: ([member],[firstname] >=Rb AND
[member],[firstname] <T) ORDERED
Optimizacin de las consultas Optimizacin de las consultas
Uso de la operacin de consulta de marcadores
Anlisis del plan de consultas
Normalmente se utiliza despus de haber
procesado todos los pasos
Recuperacin de filas
Identificadores de fila
Claves de agrupacin
Optimizacin de las consultas Optimizacin de las consultas
Uso de la operacin de consulta de marcadores
Observacin de los detalles
Se utiliza una etiqueta de marcador para buscar
la fila
Determinacin de cundo se utiliza el operador de
consulta de marcadores
Las consultas contienen la clusula IN o el
operador OR
Optimizacin de las consultas Optimizacin de las consultas
Uso de un ndice para abarcar una consulta
Introduccin a los ndices que abarcan consultas
Bsqueda de datos mediante ndices que abarcan
consultas
Identificacin de si se puede utilizar un ndice para
abarcar una consulta
Determinacin de si se utiliza un ndice para abarcar
una consulta
Instrucciones para la creacin de ndices que abarcan
consultas
Optimizacin de las consultas Optimizacin de las consultas
Introduccin a los ndices que abarcan consultas
Slo 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 pginas de datos
Las vistas indizadas pueden agregar datos anteriores
Los ndices que abarcan consultas recuperan los
datos rpidamente
Optimizacin de las consultas Optimizacin de las consultas
Bsqueda de datos mediante ndices que abarcan
consultas
Ejemplo de exploracin de una sola pgina
Ejemplo de exploracin de recorrido parcial
Ejemplo de exploracin de recorrido completo
Optimizacin de las consultas Optimizacin de las consultas
Ejemplo de exploracin de una sola pgina
SELECT lastname, firstname
FROM member
WHERE lastname = 'Hall'
Pginas de ndice

No situadas en
el nivel de hoja
Nivel de hoja
(valor de clave)
Akhtar
Barr
Barr
Borm
Buhl
Sarah




Ganio
Hall
Hart
Jones
Jones
Jon
Don
Sherri
Amy
Beverly
Hall Don
Lang
Martin
Martin
Martin
Moris
Eric





Pginas de datos

Akhtar
Lang


Sarah
Eric


Akhtar

Ganio

Sarah

Jon

Lang



Eric



Optimizacin de las consultas Optimizacin de las consultas
Ejemplo de exploracin de recorrido parcial USE credit
SELECT lastname, firstname
FROM member
WHERE lastname BETWEEN 'Funk' AND 'Lang'
Pginas de ndice

No situadas en
el nivel de hoja
Nivel de hoja
(valor de clave)
Akhtar
Barr
Barr
Borm
Buhl





Ganio
Hall
Hart
Jones
Jones





Morgan
Nash
Nay
Ota
Rudd





Chai
Con
Con
Cox
Dale





Dunn
Dunn
Fine
Fort
Funk





Jordan
Kim
Kim
Koch
Koch





Lang
Martin
Martin
Martin
Moris





Smith
Smith
Smith
Smith
Smith





Pginas de datos
Akhtar
Chai
Dunn
Ganio




Jordan
Lang
Morgan
Smith




Akhtar
Jordan




Optimizacin de las consultas
Ejemplo de exploracin de recorrido completo
USE credit
SELECT lastname, firstname
FROM member
Pginas de ndice

No situadas en
el nivel de hoja
Nivel de hoja
(valor de clave)
Akhtar
Barr
Barr
Borm
Buhl





Ganio
Hall
Hart
Jones
Jones





Morgan
Nash
Nay
Ota
Rudd





Martin
Smith

Akhtar
Ganio

Akhtar

Martin
Chai
Con
Con
Cox
Dale





Dunn
Dunn
Fine
Fort
Funk





Jordan
Kim
Kim
Koch
Koch





Lang
Martin
Martin
Martin
Moris





Smith
Smith
Smith
Smith
Smith






Pginas de datos
Optimizacin de las consultas Optimizacin de las consultas
Identificacin 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 clusula WHERE
Optimizacin de las consultas Optimizacin de las consultas
Identificacin 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 clusula
WHERE
Los ndices se pueden combinar para abarcar
consultas
Optimizacin de las consultas Optimizacin de las consultas
Determinacin de si se utiliza un ndice para abarcar
una consulta
Observacin de los resultados del plan de
ejecucin
Se muestra la frase Comprobar un ndice no
agrupado, en su totalidad o slo un intervalo
Comparacin de E/S
ndice no agrupado
Nmero total de niveles no situados en el
nivel de hoja
Optimizacin de las consultas Optimizacin de las consultas
Determinacin de si se utiliza un ndice para abarcar
una consulta
Comparacin de E/S
ndice no agrupado
Nmero total de pginas que componen el
nivel de hoja
Nmero total de filas por pgina del nivel de
hoja
Nmero total de filas por pgina de datos
Nmero total de pginas que componen la
tabla
Optimizacin de las consultas Optimizacin de las consultas
Instrucciones para la creacin de ndices que
abarcan consultas
Agregar columnas a los ndices
Reduzca el tamao de la clave del ndice
Mantenga una proporcin de tamao entre la fila
y la clave
Optimizacin de las consultas Optimizacin de las consultas
Estrategias de indizacin
Evaluacin de la E/S para las consultas que tienen
acceso a un intervalo de datos
Indizacin para varias consultas
Instrucciones para la creacin de ndices
Optimizacin de las consultas Optimizacin de las consultas
Mtodo 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
Pgina de E/S
10.417
1042
100.273
273
Evaluacin de la E/S para las consultas que tienen
acceso a un intervalo de datos
SELECT charge_no
FROM charge
WHERE charge_amt BETWEEN 20 AND 30
Optimizacin de las consultas Optimizacin de las consultas
Indizacin para varias consultas
USE credit
SELECT charge_no, charge_dt, charge_amt
FROM charge
WHERE statement_no = 19000 AND member_no = 3852
USE credit
SELECT member_no, charge_no, charge_amt
FROM charge
WHERE charge_dt between '07/30/1999'
AND '07/31/1999' AND member_no = 9331
Ejemplo 1
Ejemplo 2
Optimizacin de las consultas Optimizacin de las consultas
Instrucciones para la creacin de ndices
Determine las prioridades de todas las
consultas
Determine la selectividad de cada parte de la
clusula 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 dems ndices que sean
necesarios
Pruebe el rendimiento de las consultas
Optimizacin de las consultas Optimizacin de las consultas
Suplantacin del optimizador de consultas
Determinacin de cundo se debe suplantar el
optimizador de consultas
Uso de las sugerencias y la instruccin SET
FORCEPLAN
Comprobacin del rendimiento de las consultas
despus de suplantar el optimizador de consultas
Optimizacin de las consultas Optimizacin de las consultas
Determinacin de cundo se debe suplantar el
optimizador de consultas
Limitar las sugerencias de optimizador
Antes de suplantar el optimizador de consultas debe
explorar las dems alternativas mediante:
Actualizacin de estadsticas
Recompilacin de procedimientos almacenados
Revisin de las consultas o argumentos de bsqueda
Evaluacin de la posibilidad de crear ndices
diferentes
Optimizacin de las consultas Optimizacin de las consultas
Uso de las sugerencias y la instruccin
SET FORCEPLAN
Sugerencias de tabla
Sugerencias de combinacin
Sugerencias de consulta
Instruccin SET FORCEPLAN
Optimizacin de las consultas Optimizacin de las consultas
Comprobacin del rendimiento de las consultas
despus 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
Optimizacin de las consultas Optimizacin de las consultas
Procedimientos recomendados
Utilice el regulador de consultas para evitar que se ejecuten
consultas que tarden mucho tiempo y usen muchos recursos
del sistema
Examine y conozca totalmente los datos y cmo se tendr acceso
a ellos en las consultas
Cree ndices que resuelvan las consultas utilizadas con ms
frecuencia
Establezca estrategias de indizacin para consultas individuales
y mltiples
Evite la suplantacin del optimizador de consultas
Optimizacin de las consultas Optimizacin de las consultas
Prctica
SQL Server
2000
Optimizacin de las consultas Optimizacin de las consultas
Repaso
Introduccin al optimizador de consultas
Obtencin de informacin del plan de ejecucin
Uso de un ndice para abarcar una consulta
Estrategias de indizacin
Suplantacin del optimizador de consultas
Optimizacin de las consultas Optimizacin de las consultas
Anlisis de consultas
Introduccin
Consultas que utilizan el operador AND
Consultas que utilizan el operador OR
Consultas que utilizan operaciones de combinacin
Anlisis de consultas
Consultas que utilizan el operador AND
Procesamiento del operador AND
Devuelve las filas que cumplen todas las
condiciones de cada criterio especificado en
la clusula WHERE
Limita de forma progresiva el nmero de filas
devueltas con cada condicin de bsqueda
adicional
Puede utilizar un ndice por cada condicin de
bsqueda de la clusula WHERE
Anlisis de consultas Anlisis de consultas
Consultas que utilizan el operador AND
Directrices de indizacin y consideraciones de
rendimiento
Definir un ndice en un criterio de bsqueda
altamente selectivo
Evaluar el rendimiento entre crear varios
ndices de una columna y un ndice
compuesto
Anlisis de consultas Anlisis de consultas
Consultas que utilizan el operador OR
Devuelve las filas que cumplen cualquier
condicin de cada criterio especificado en la
clusula WHERE
Aumenta de forma progresiva el nmero de
filas devueltas con cada condicin de
bsqueda adicional
Puede utilizar un ndice o ndices diferentes
para cada parte del operador OR
Anlisis de consultas Anlisis de consultas
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
Anlisis de consultas Anlisis de consultas
Prctica: Anlisis de consultas que utilizan los
operadores AND y OR
SQL Server
2000
Anlisis de consultas Anlisis de consultas
Cons. Marcadores




Comb. hash/inter


Filtro


member.fname




Filtro



member.corp_no



Select

Anlisis de consultas Anlisis de consultas
Cons. Marcadores



Eq. comb. hash



Filtro


member.fname




member.corp_no



Select

Raz comb. hash



member.mem_no




Anlisis de consultas Anlisis de consultas
Cons. Marcadores



member.mbr_mem...



SELECT




Anlisis de consultas Anlisis de consultas
Anlisis de consultas
SELECT
Costo: 1%




Recorrido tabla
Costo: 99%




Anlisis de consultas
Consultas que utilizan oper. de combinacin
Selectividad y densidad de una clusula JOIN
Cmo se procesan las combinaciones
Cmo se procesan las combinaciones de bucle
anidado
Presentacin multimedia: Cmo se procesan las
combinaciones de mezcla
Consideraciones acerca del uso de combinaciones
de mezcla
Cmo se procesan las combinaciones hash
Anlisis de consultas Anlisis de consultas
Selectividad y densidad de una clusula JOIN
Selectividad de una clusula
JOIN
Si las estadsticas estn
disponibles, se basa en la
densidad del ndice
Si las estadsticas no estn
disponibles, se basa en el
nmero de consideraciones
Selectividad
P
o
r
c
e
n
t
a
j
e

d
e

f
i
l
a
s

d
e
v
u
e
l
t
a
s

Anlisis de consultas Anlisis de consultas
Selectividad y densidad de una clusula JOIN
Densidad de una clusula JOIN
Un ndice con un gran
nmero de duplicados tiene
alta densidad
Un ndice nico tiene baja
densidad
Selectividad
P
o
r
c
e
n
t
a
j
e

d
e

f
i
l
a
s

d
e
v
u
e
l
t
a
s

Anlisis de consultas Anlisis de consultas
Cmo se procesan las combinaciones
member
member_no
.
.
.
5678
.
.
.
.
.
.
Chen
.
.
.
Resultado
ndice
no agrupado nico
ndice no agrupado
charge
charge_no
.
.
.
15259
.
.
.
16351
.
.
.
17673
.
.
.
member_no
.
.
.
5678
.
.
.
5678
.
.
.
5678
.
.
.

member_no
5678
5678
5678
5678
5678
5678
5678
5678
5678
5678
5678
5678
5678
charge_no
30257
17673
15259
16351
32778
48897
60611
66794
74396
76840
86173
87902
99607

(13 filas afectadas)
USE credit
SELECT m.member_no, c.charge_no, c.charge_amt, c.statement_no
FROM member AS m INNER JOIN charge AS c
ON m.member_no = c.member_no
WHERE c.member_no = 5678
Anlisis de consultas Anlisis de consultas
Cmo se procesan las combinaciones de bucle
anidado

USE credit
SELECT m.member_no, c.charge_no, c.charge_amt, s.statement_no
FROM member AS m INNER JOIN charge AS c
ON m.member_no = c.member_no
INNER JOIN statement AS s
ON c.member_no = s.member_no
WHERE m.member_no = 5678

Combina el resultado con las filas
correspondientes de la tabla charge
Recupera las filas correspondientes
de ambas tablas y las combina
1
2
charge
charge_no
.
.
.
15259
.
.
.
16351
.
.
.
17673
.
.
.
member_no
.
.
.
5678
.
.
.
5678
.
.
.
5678
.
.
.
statement
statement_no
.
.
.
5678
15678
.
.
.

member_no
.
.
.
5678
5678
.
.
.


.
.
.
.
.
.
.
.

member
member_no
.
.
.
5678
.
.
.
.
.
.
Chen
.
.
.
Anlisis de consultas Anlisis de consultas
Consideraciones acerca del uso de combinaciones de
mezcla
Requiere que las columnas combinadas estn
ordenadas
Evala valores ordenados
Utiliza un ndice del rbol existente
Aprovecha las operaciones de ordenacin
Realiza su propia operacin de ordenacin
Anlisis de consultas Anlisis de consultas
Consideraciones acerca del uso de combinaciones de
mezcla
Consideraciones acerca del rendimiento

USE credit
SELECT 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'

Anlisis de consultas Anlisis de consultas
Cmo 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 generacin
Anlisis de consultas Anlisis de consultas
Procedimientos recomendados
Definir un ndice en una columna altamente selectiva
Asegurarse de que existen ndices para todas las columnas a las
que se hace referencia en el operador OR
Minimice el uso de combinaciones hash
Anlisis de consultas Anlisis de consultas
Repaso
Consultas que utilizan el operador AND
Consultas que utilizan el operador OR
Consultas que utilizan operaciones de combinacin
Anlisis de consultas Anlisis de consultas
Administracin de transacciones y
bloqueos
Introduccin
Introduccin a las transacciones y los bloqueos
Administracin de las transacciones
Bloqueos en SQL Server
Administracin de los bloqueos
Administracin de transacciones y
bloqueos
Introduccin a las transacciones y los bloqueos
Las transacciones aseguran que varias
modificaciones a los datos se procesan juntas
Los bloqueos impiden los conflictos de
actualizacin
Las transacciones estn serializadas
El bloqueo es automtico
Los bloqueos permiten usar los datos al
mismo tiempo
Control de simultaneidad




Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Administracin de las transacciones
Presentacin multimedia: Transacciones de
SQL Server
Recuperacin de transacciones y puntos de
comprobacin
Consideraciones para el uso de transacciones
Establecimiento de la opcin de transacciones
implcitas
Restricciones en las transacciones
definidas por el usuario
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Recuperacin de transacciones y puntos de
comprobacin
Recuperacin de transacciones Accin requerida
Ninguna
Puntos de comprobacin Fallo del sistema
1
2
3
4
5
Confirmar
Deshacer
Confirmar
Deshacer
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Consideraciones para el uso de transacciones
Recomendaciones para las transacciones
Las transacciones deben ser lo ms cortas
posible
Preste atencin a ciertas instrucciones
Transact-SQL
Evite las transacciones que requieran la
intervencin del usuario
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
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
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Establecimiento de la opcin de transacciones
implcitas
Una transaccin se inicia automticamente cuando
se ejecutan determinadas instrucciones
No se permiten transacciones anidadas
La transaccin debe completarse explcitamente con
COMMIT o ROLLBACK TRANSACTION
De forma predeterminada, esta opcin est
desactivada
SET IMPLICIT_TRANSACTIONS ON
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
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
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Bloqueos en SQL Server
Problemas de simultaneidad impedidos por
los bloqueos
Recursos que se pueden bloquear
Tipos de bloqueos
Compatibilidad de los bloqueos
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Problemas de simultaneidad impedidos por los
bloqueos
Actualizacin perdida
Dependencia no confirmada (lectura no confirmada)
Anlisis incoherente (lectura no repetible)
Lecturas fantasma
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Recursos que se pueden bloquear
Elemento Descripcin
RID Identificador de fila
Clave
Bloqueo de fila dentro de
un ndice
Pgina
Extensin
Tabla
Pgina de datos o pgina
de ndice
Grupo de pginas
Tabla completa
Base de
datos
Base de datos completa
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Tipos de bloqueos
Bloqueos bsicos
Compartidos
Exclusivos
Bloqueos para situaciones especiales
Intencin
Actualizacin
Esquema
Actualizacin masiva
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
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
ningn otro bloqueo
Los bloqueos de actualizacin son compatibles
slo con los bloqueos compartidos
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Opciones de bloqueo en el nivel de sesin
Arquitectura de bloqueos dinmicos
Opciones de bloqueo en el nivel de tabla
Interbloqueos
Presentacin de informacin acerca de los bloqueos
Administracin de los bloqueos
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Opciones de bloqueo en el nivel de sesin
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
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Arquitectura de bloqueos dinmicos
Bloqueo
dinmico
Tabla Pgina Fila
Costo
Granularidad
Costo de bloqueo
Costo de simultaneidad
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Opciones de bloqueo en el nivel de tabla
selas con precaucin
Puede especificar una o ms opciones de bloqueo
para una tabla
Utilice la parte sugerenciasDeOptimizador de la
clusula FROM de las instrucciones SELECT o
UPDATE
Suplanta las opciones de bloqueo en el nivel de
sesin
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Interbloqueos
Cmo SQL Server termina los interbloqueos
Cmo minimizar los interbloqueos
Cmo personalizar la configuracin de tiempo de
espera de bloqueo

Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Presentacin de informacin acerca de los bloqueos
Ventana Actividad actual
Procedimiento almacenado de sistema sp_lock
Analizador de SQL
Monitor de sistema de Windows 2000
Informacin adicional
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Procedimientos recomendados
Mantenga las transacciones lo ms cortas posible
Disee las transacciones para minimizar los interbloqueos
Utilice las opciones de bloqueo predeterminadas de SQL Server
Administracin de transacciones y
bloqueos
Tenga cuidado cuando utilice las opciones de bloqueo
Administracin de transacciones y
bloqueos
Prctica
SQL Server
2000
Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos
Repaso
Introduccin a las transacciones y los bloqueos
Administracin de las transacciones
Bloqueos en SQL Server
Administracin de los bloqueos





Administracin de transacciones y
bloqueos
Administracin de transacciones y
bloqueos

You might also like