Está en la página 1de 4

PRACTICA

1. Concepto:
Un índice en SQL es una estructura de datos utilizada para optimizar las consultas a una
base de datos. Los índices se crean en una o varias columnas de una tabla y su objetivo
es acelerar las búsquedas y las consultas de los datos almacenados en esa tabla. El
índice permite a la base de datos encontrar más rápidamente los datos que coinciden con
una búsqueda, lo que reduce el tiempo necesario para ejecutar una consulta. Los índices
pueden ser útiles en tablas grandes, especialmente donde se realizan consultas
frecuentes o se busca en una o varias columnas en particular.

2. Ejemplo:
crear un índice en SQL:
Tenemos una tabla llamada "Clientes" con las columnas "id", "nombre" y
"apellido".
Para crear un índice en la columna "nombre" deberíamos ejecutar la
siguiente sentencia SQL:

CREATE INDEX idx_nombre ON Clientes (nombre);


Esto generaría un índice en la columna "nombre" de la tabla "Clientes", lo
cual mejora el rendimiento de las consultas que utilicen la columna
"nombre".

También se puede crear un índice en varias columnas, por ejemplo:

CREATE INDEX idxnombreapellido ON Clientes (nombre, apellido);

Esto generaría un índice compuesto por la columna "nombre" y la columna


"apellido" de la tabla "Clientes".
Es importante recordar que la creación de índices debe ser utilizada con
precaución y analizando cuidadosamente la estructura y uso de las tablas,
ya que en algunos casos puede generar un impacto negativo en el
rendimiento de la base de datos.

3. Script:
Modelo físico de datos: Código de producto (clave
primaria)
El modelo físico de datos para el Nombre del producto
proceso de ALMACEN con índices Cantidad en stock
consta de las siguientes tablas: Precio del producto
Fecha de última actualización
Producto: (índice)
Proveedor:
Código de proveedor (clave KEY, codigoproducto INT,
primaria) codigoproveedor INT,
Nombre de la empresa cantidadcomprada INT,
Nombre del contacto fechacompra DATE, FOREIGN KEY
Dirección (codigoproducto) REFERENCES
Teléfono producto(codigoproducto),
Correo electrónico FOREIGN KEY (codigoproveedor)
Compra: REFERENCES
Número de compra (clave proveedor(codigo_proveedor) );
primaria)
Código de producto (clave CREATE INDEX idxfechacompra
foránea) ON compra(fecha_compra);
Código de proveedor (clave
foránea) CREATE TABLE venta
Cantidad comprada ( numeroventa INT PRIMARY KEY,
Fecha de compra (índice) codigoproducto INT,
Venta: cantidadvendida INT, precioventa
Número de venta (clave primaria) DECIMAL(10, 2), fechaventa DATE,
Código de producto (clave FOREIGN KEY (codigoproducto)
foránea) REFERENCES
Cantidad vendida producto(codigo_producto) );
Precio de venta
Fecha de venta (índice) CREATE INDEX idxfechaventa ON
Script de creación de la base de venta(fecha_venta);
datos:
Procedimientos almacenados:
CREATE DATABASE
almacenconindices; CREATE PROCEDURE
spinsertarproducto
USE almacenconindices; @codigoproducto INT,
@nombreproducto VARCHAR(50),
CREATE TABLE producto @cantidadstock INT,
( codigoproducto INT PRIMARY @precioproducto DECIMAL(10, 2),
KEY, nombreproducto @fechaactualizacion DATE AS
VARCHAR(50), cantidadstock INT, INSERT INTO
precioproducto DECIMAL(10, 2), producto(codigoproducto,
fecha_actualizacion DATE ); nombreproducto, cantidadstock,
precioproducto,
CREATE INDEX fechaactualizacion) VALUES
idxfechaactualizacion ON (@codigoproducto,
producto(fecha_actualizacion); @nombreproducto,
@cantidadstock,
CREATE TABLE proveedor @precioproducto,
( codigoproveedor INT PRIMARY @fecha_actualizacion);
KEY, nombreempresa
VARCHAR(50), nombrecontacto CREATE PROCEDURE
VARCHAR(50), direccion spactualizarproducto
VARCHAR(100), telefono @codigoproducto INT,
VARCHAR(20), correoelectronico @nombreproducto VARCHAR(50),
VARCHAR(50) ); @cantidadstock INT,
@precioproducto DECIMAL(10, 2),
CREATE TABLE compra @fechaactualizacion DATE AS
( numerocompra INT PRIMARY UPDATE producto SET
nombreproducto = FROM compra WHERE
@nombreproducto, cantidadstock numerocompra =
= @cantidadstock, precioproducto @numero_compra;
= @precioproducto,
fechaactualizacion = CREATE PROCEDURE
@fechaactualizacion WHERE spinsertarventa @numeroventa
codigoproducto = INT, @codigoproducto INT,
@codigo_producto; @cantidadvendida INT,
@precioventa DECIMAL(10, 2),
CREATE PROCEDURE @fechaventa DATE AS INSERT
speliminarproducto INTO venta(numeroventa,
@codigoproducto INT AS DELETE codigoproducto, cantidadvendida,
FROM producto WHERE precioventa, fechaventa) VALUES
codigoproducto = (@numeroventa,
@codigo_producto; @codigoproducto,
@cantidadvendida,
CREATE PROCEDURE @precioventa, @fecha_venta);
spinsertarcompra
@numerocompra INT, CREATE PROCEDURE
@codigoproducto INT, spactualizarventa @numeroventa
@codigoproveedor INT, INT, @codigoproducto INT,
@cantidadcomprada INT, @cantidadvendida INT,
@fechacompra DATE AS INSERT @precioventa DECIMAL(10, 2),
INTO compra(numerocompra, @fechaventa DATE AS UPDATE
codigoproducto, venta SET codigoproducto =
codigoproveedor, @codigoproducto,
cantidadcomprada, fechacompra) cantidadvendida =
VALUES (@numerocompra, @cantidadvendida, precioventa =
@codigoproducto, @precioventa, fechaventa =
@codigoproveedor, @fechaventa WHERE
@cantidadcomprada, numeroventa = @numero_venta;
@fecha_compra);
CREATE PROCEDURE
CREATE PROCEDURE speliminarventa @numeroventa
spactualizarcompra INT AS DELETE FROM venta
@numerocompra INT, WHERE numeroventa =
@codigoproducto INT, @numero_venta;
@codigoproveedor INT,
@cantidadcomprada INT, Consultas:
@fechacompra DATE AS UPDATE
compra SET codigoproducto = Obtener los productos que se han
@codigoproducto, actualizado en los últimos 7 días y
codigoproveedor = su respectiva cantidad en stock.
@codigoproveedor, SELECT p.codigoproducto,
cantidadcomprada = p.nombreproducto,
@cantidadcomprada, p.cantidadstock,
fechacompra = @fechacompra p.fechaactualizacion FROM
WHERE numerocompra = producto p WHERE
@numero_compra; p.fecha_actualizacion >=
DATEADD(day, -7, GETDATE());
CREATE PROCEDURE
speliminarcompra
@numerocompra INT AS DELETE
Obtener la cantidad total de
ventas que se han realizado en un Obtener el nombre de los
mes determinado. proveedores que aún no han
SELECT SUM(v.cantidadvendida) realizado ninguna compra.
FROM venta v WHERE SELECT pr.nombreempresa FROM
MONTH(v.fechaventa) = 7; proveedor pr LEFT JOIN compra c
ON pr.codigoproveedor =
Obtener los productos que se han c.codigoproveedor WHERE
vendido más de 100 unidades en c.codigoproveedor IS NULL;
el mes actual y su respectiva
cantidad vendida. Obtener el nombre de los
SELECT p.nombreproducto, productos que se han vendido en
SUM(v.cantidadvendida) AS el último mes y su respectivo
cantidadvendida FROM producto precio de venta.
p INNER JOIN venta v ON SELECT p.nombreproducto,
p.codigoproducto = v.precioventa FROM producto p
v.codigoproducto WHERE INNER JOIN venta v ON
MONTH(v.fechaventa) = p.codigoproducto =
MONTH(GETDATE()) AND v.codigoproducto WHERE
v.cantidadvendida > 100 GROUP v.fecha_venta >=
BY p.nombreproducto; DATEADD(month, -1, GETDATE());

4. Bibliografía:

Delaney, K. (2005). Index Organization in SQL Server 2005: Out with DBCC,
in with a new function. SQL Server Magazine, 7(11), 63–64.

Ingrese a las estructuras de índice. (2004). Revista SQL Server , 6 (11), 35–
36.

Moreno A., F. J., & Olarte V., J. W. (2012). Índices de tres estrellas: un caso
de estudio en Oracle y SQL Server. Ingenium, 13(26), 6–17.

Rhee, J., & Noel, A. (2012). Incremental Index Maintenance: T-SQL solution
defragments indexes in a non-impactful way. SQL Server Pro, 14(3), 7–8.

También podría gustarte