SQL Data Definition Language
SQL
Data Definition Language
Objetivos
• Índices• Triggers• Stored Procedures
Índices
• A veces queremos obtener registros especificando los valores en uno o más registros, ej.,–Encontrar todos los estudiantes en el
departamento de “computación”–Encontrar todos los estudiantes con un
prom > 3
Índice
• Es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla.
• Al aumentar drásticamente la velocidad de acceso, se suelen usar sobre aquellos campos sobre los cuales se hagan frecuentes búsquedas.
Índice
• Tiene un funcionamiento similar al índice de un libro, guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos.
• Para buscar un elemento que esté indexado, sólo hay que buscar en el índice dicho elemento para, una vez encontrado, devolver el registro que se encuentre en la posición marcada por el índice.
Índice
• Los índices pueden ser creados usando una o más columnas, proporcionando la base tanto para búsquedas rápidas al azar como de un ordenado acceso a registros eficiente.
• Los índices son construidos sobre árboles B, B+, B* o sobre una mezcla de ellos, funciones de cálculo u otros métodos.
• El espacio en disco requerido para almacenar el índice es típicamente menor que el espacio de almacenamiento de la tabla
• Los índices generalmente contienen solamente los campos clave de acuerdo con los que la tabla será ordenada, y excluyen el resto de los detalles de la tabla.
Pregunta sobre índices
• Que clase de selects soportan?– Selecciones de igualdad (op es =)– Selecciones de rango (op es <, >, <=, >=, BETWEEN)– Más selecciones exóticas:
• Rangos de 2-dimensiones (“oeste de Boston y este de Brighton y Norte de South Boston y Sur de Summerville”)– O n-dimensiones
• Distancias de 2-dimensiones (“dentro de 2 millas del edificio de la FIEC”)– O n-dimensiones
• Ranking de queries (“10 restaurantes más cercanos a la ESPOL”)
Clasificación de índices
• Representación de entradas de datos en los índices– ej., qué tipo de información está guardando el
índice?– Hay 3 alternativas
• Índices Primarios vs. Secundarios• Índices Clustered vs. Unclustered• Índices Llave Simple vs. Compuestos• Basados en arbol, hash, otros
Cuándo utilizar índices?
• Campos que se hacen queries seguidos• Campo con alta cardinalidad• Registros pequeños y tamaños fijos son
preferidos.(Obs: La mayoría de los DBMSs indexan
automáticamente el PK)
Create Index command
• Create index <iNombre> on <nombre_tabla> (<col_nombre>);
• Create index ieid on estudiantes(eid);
Indexes (Defaults)
• Cada vez que un PK es creado, un índice es automáticamente creado.
• Cada vez que el tipo de índice no se especifica, el tipo de índice creado es unB-Trees.
Índices B+ Tree
Las páginas de hojas contienen entradas de datos, encadenadas(prev & next) Las páginas de no hojas tienen entradas de índices; solo usadas para búsquedas directas:
P0 K 1 P 1 K 2 P 2 K m P m
Entrada de índice
Páginas
De No Hojas
De Hojas(Ordenadas por la llave de búsqueda)
Páginas
1717
Ejemplo B+ Tree
• Encuentre 28*? 29*? Todos los > 15* y< 30*• Ingresar/borrar: Encontrar los datos de
entradas en la hoja, luego cambiarlos. A veces se necesita a justar el padre.
2* 3*
Raiz
17
30
14* 16* 33* 34* 38* 39*
135
7*5* 8* 22* 24*
27
27* 29*
Entradas<= 17 Entradas> 17
Note how data entriesin leaf level are sorted
Punteros a las páginas de datos(rid)
Índices Hash
• Bueno para las selecciones de igualdad. • El Índice es una colección de cubos. – Cubo= página primaria más cero o más páginas
overflow. – Cubos contienen entradas de datos.
• Función Hashing: h(r) = cubo en el cual (la entrada de dato) para el registro r pertenece.
Tabla Hash
Clasificación de índices
• Primarios vs. Secundarios: Si la clave de búsqueda contiene una clave primaria entonces se llama índice primario.– Único índice: La clave de búsqueda contiene una
clave candidata.
Clasificación de índices
• Clustered vs. unclustered: Si el orden de los registros de datos es lo mismo, o parecido al orden de los registros de datos de índices, entonces se llama índice clustered.– Un archivo puede ser clustered en al menos una
clave de búsqueda.– El costo de seleccionar registros de datos a través
de índices varia mucho si un índice es clustered o no!
Clustered vs. Unclustered
Index entries
Data entries
direct search for
(Index File)(Data file)
Data Records
data entries
Data entries
Data Records
CLUSTERED UNCLUSTERED
Unclustered vs. Clustered
• Clustered Pros– Eficiente para búsquedas de rango– Se puede hacer algún tipo de compresión– Beneficios de localidad(datos relacionados?)
• Clustered Cons– Caro de mantener
Triggers
• Es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación de inserción (INSERT), actualización (UPDATE) o borrado (DELETE).
• Son usados para mejorar la administración de la Base de datos, sin necesidad de contar con que el usuario ejecute la sentencia de SQL.
• Además, pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc.
La estructura básica de un trigger es:
• Llamada de activación: es la sentencia que permite "disparar" el código a ejecutar.
• Restricción: es la condición necesaria para realizar el código. Esta restricción puede ser de tipo condicional o de tipo nulidad.
• Acción a ejecutar: es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones iniciales.
Tipos de triggers
• Row Triggers (o Disparadores de fila): son aquellas que se ejecutaran n-veces si se llama n-veces desde la tabla asociada al trigger
• Statement Triggers (o Disparadores de secuencia): son áquellos que sin importar la cantidad de veces que se cumpla con la condición, su ejecución es única.
DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END|DELIMITER ;
Stored Procedure
• Es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos.
• La ventaja es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado.
• Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
Stored ProcedureCREATE PROCEDURE addtupla1(i IN NUMBER) AS BEGIN
INSERT INTO tabla VALUES(i, 'xxx'); END addtupla1;
create or replace procedure display(eno in integer,nombre out varchar2,trabajo out varchar2, salario out integer, locacion out varchar2)isbeginselect enombre,trabajo,sal,loc into nombre,trabajo,salario,locacion from emp e, dept dwhere e.deptno=d.deptno AND empno=eno;end;