CREATE INDEX se utiliza para crear un índice en una tabla de una base de datos. Los índices son estructuras de datos que mejoran la velocidad de las consultas al permitir un acceso más rápido a los registros de una tabla. Cuando se ejecuta una consulta que busca registros basados en los valores de ciertas columnas, el motor de la base de datos puede utilizar un índice asociado a esas columnas para buscar y recuperar los registros de manera más eficiente.
Un ejemplo simple de CREATE INDEX sería:
CREATEINDEX idx_lastname ON STUDENTS (LASTNAME);
Este comando crea un índice llamado idx_lastname en la tabla STUDENTS, utilizando la columna LASTNAME. Esto sería útil si la tabla tiene un gran número de registros y se ejecutan consultas frecuentes que buscan estudiantes por su apellido.
TRIGGER:
Un trigger en SQL es un tipo de procedimiento almacenado que se ejecuta automáticamente cuando se produce un evento en una tabla o vista. Los eventos que pueden activar un trigger incluyen inserciones, actualizaciones o eliminaciones de registros en la tabla a la que está asociado el trigger.
Los triggers son útiles para aplicar reglas de negocio, mantener la integridad de los datos o realizar acciones adicionales en la base de datos cuando se realizan ciertas operaciones.
Aquí hay un ejemplo de cómo crear un trigger en SQL:
CREATETRIGGER update_salary
AFTERUPDATEON EMPLOYEES
FOR EACH ROWBEGINIF NEW.SALARY > OLD.SALARY THENINSERTINTO SALARY_HISTORY (EMPLOYEE_ID, OLD_SALARY, NEW_SALARY, CHANGE_DATE)VALUES(NEW.EMPLOYEE_ID, OLD.SALARY, NEW.SALARY,NOW());ENDIF;END;
En este ejemplo, se crea un trigger llamado update_salary que se activa después de que se actualiza una fila en la tabla EMPLOYEES. Cuando el salario de un empleado se actualiza a un valor mayor que el salario anterior, este trigger registra la información relevante en una tabla llamada SALARY_HISTORY.
Ambos CREATE INDEX y TRIGGER son herramientas poderosas en SQL que permiten mejorar el rendimiento y la funcionalidad de una base de datos, respectivamente.
Caro 👩💻 no tenia conocimiento sobre crear trigger en SQL, gracias por compartirlo
en realidad es una introducción a PLSQL de Oracle, es un poco más avanzado pero con funciones más practicas!!
CREATE INDEX
Un índice en SQL es similar a un índice en un libro: ayuda a encontrar información rápidamente sin tener que revisar todas las páginas. Los índices mejoran la velocidad de las consultas sobre una tabla.
CREATE INDEX se utiliza para crear un índice en una tabla.
Los índices pueden ser creados en una o más columnas de una tabla.
Ayudan a acelerar las búsquedas y las consultas de datos.
Ejemplo:
CREATE INDEX idx_employee_name ON employees (name);
En este ejemplo, se crea un índice llamado idx_employee_name en la columna name de la tabla employees. Ahora, las consultas que buscan por el nombre serán más rápidas.
Un disparador (trigger) es un conjunto de instrucciones que se ejecutan automáticamente en respuesta a ciertos eventos en una tabla o vista, como inserciones, actualizaciones o eliminaciones de datos.
Los triggers pueden ejecutarse antes o después de un evento específico (como BEFORE INSERT o AFTER UPDATE).
Son útiles para mantener la integridad de los datos y realizar tareas automáticas.
Ejemplo:
CREATE TRIGGER trg_before_insert_employee
BEFORE INSERT ON employees
FOR EACH ROWBEGIN SET NEW.created_at = NOW();
END;
En este ejemplo, se crea un trigger llamado trg_before_insert_employee. Este trigger se ejecuta antes de insertar una nueva fila en la tabla employees y automáticamente establece el valor de la columna created_at a la fecha y hora actuales (NOW()).
CREATE INDEX: Mejora la rapidez de las búsquedas en la tabla.
TRIGGER: Ejecuta automáticamente acciones cuando ocurren eventos específicos en la tabla, como inserciones, actualizaciones o eliminaciones.
Cómo no podían faltar las metáforas que hacen más sencillo el uso de la herramienta:
Imagina que Caperucita Roja está entregando una canasta de alimentos a su abuela. Crear un índice (CREATE INDEX) es como colocar señales en el camino del bosque para que Caperucita llegue más rápido a la casa de su abuela sin perderse. Estas señales permiten que Caperucita no tenga que explorar cada rincón del bosque, ahorrando tiempo y energía (igual que los índices reducen el tiempo de búsqueda en una base de datos).
Por otro lado, unTRIGGERsería como un mecanismo mágico que automáticamente avisa a la abuela cuando Caperucita llega al bosque, sin que Caperucita tenga que dar aviso de forma manual. En este caso, elTRIGGERse dispara automáticamente cuando se inserta una nueva orden en la base de datos, igual que la abuela es avisada automáticamente cuando Caperucita llega cerca.
Yo estuve tratando de poner el TRIGGER en práctica en la base de datos que tengo de prueba para seguir el curso, dicha base de datos está alojada en phpmyadmin.
Cuando intenté hacer un TRIGGER similar al que ponen en el ejemplo me daba error se sintáxis, cosa que no entendía y entonces fui y lo chatgptie y descubrí el DELIMITER que sirve para cambiar el separador en las consultas cuando esta es muy compleja (como en este caso que hay consultas anidadas), este me solucionó el error y se los comparto por si a alguien le ocurrió lo mismo:
Ufff hace rato rato no veía la declaración del DELIMITER .
Tipicamente primero estariamos aprendiendo sobre SPs y luego sobre Triggers.
Bueno sobre los Tigres (asi los llamaba un jefe) puedo aportar:
Es codigo SQL que se activa despues de ejecutar algun DDL, DML o DCL.
Aqui una lista de cuales eventos pueden disparar un Trigger en SQL
INSERT: Trigger fires when a row is inserted.
UPDATE: Trigger fires when an existing row is updated.
DELETE: Trigger fires when a row is deleted.
<!---->
CREATE: Trigger fires when objects like tables or views are created.
ALTER: Trigger fires when objects are modified (e.g., altering a table).
DROP: Trigger fires when objects are dropped.
GRANT/REVOKE/DENY: Trigger fires on permission changes.
ENABLE/DISABLE TRIGGER: Trigger fires when a trigger is enabled or disabled.
Ademas SQL tiene otro disparador interesante:
LOGON: Trigger fires when a user session connects to the SQL Server instance.
Ojo que hablo especificamente de SQL porque otros motores pueden generar eventos: AFTER COMMIT o AFTER ROLLBACK
Este tema estaría bien desarrollarlo en vídeo, pero, bueno a investigar un poco más.
La creacion del indice queda bastante clara, pero luego como se le da uso a este? Y no me queda muy claro porque es mas eficiente para busquedas cuando haya muchos mas datos, que no seria lo mismo realizar la busqueda por la columna que por el indice? No entiendo bien la diferencia, solo entiendo que es mejor, pero no entiendo el porque ni como funciona
Excelentes aportes.
Optimización de Bases de Datos con SQL: CREATE INDEX y TRIGGER
Optimizar tu base de datos puede mejorar significativamente el rendimiento de las consultas y asegurar la integridad de los datos. Aquí te explicaré cómo usar índices (CREATE INDEX) y disparadores (TRIGGER) en la base de datos tecnoproductos.
Índices (CREATE INDEX)
Un índice en SQL es una estructura que mejora la velocidad de las operaciones de selección (SELECT) a costa de ralentizar las operaciones de inserción (INSERT), actualización (UPDATE) y eliminación (DELETE). Los índices son útiles para columnas que se utilizan frecuentemente en las cláusulas WHERE, JOIN y ORDER BY.
--Ejemplo con mi base de datos TecnoproductosCREATEINDEX idx_productos_nombre ONproductos(nombre);CREATEINDEX idx_productos_marca_id ONproductos(marca_id);CREATEINDEX idx_productos_vendedor_id ONproductos(vendedor_id);CREATEINDEX idx_marcas_nombre ONmarcas(nombre);CREATEINDEX idx_vendedores_nombre ONvendedores(nombre);CREATEORREPLACEFUNCTIONupdate_updated_at_column()RETURNSTRIGGERAS $$
BEGINNEW.updated_at=now();RETURNNEW;END;$$ LANGUAGE plpgsql;CREATETRIGGER update_productos_updated_at
BEFOREUPDATEON productos
FOREACHROWEXECUTEFUNCTIONupdate_updated_at_column();EXPLAINSELECT*FROM productos WHERE nombre ='iPhone 13';ALTERTABLE productos ADDCOLUMN updated_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP;UPDATE productos SET descripcion ='Nuevo descripción'WHERE id =1;SELECT*FROM productos WHERE id =1;
Los índices permiten una recuperación de datos más rápida, mientras que los disparadores pueden automatizar tareas de mantenimiento y asegurar la integridad de los datos
los trigger Segun entiendo nos ayudan a almacenar los cambios que se hacen a los registros de una tabla como actualizar el nombre o el salario, este registro se almacenaria en una nueva tabla ?
Hola companero, los Triggers no solo permiten almacenanar info en tablas (nuevas o existente) como (calcular datos, hacer copias, etc).
Tambien pueden generar alertas, generar logs (no confundir con los logs de las tablas), pueden actuar como policias y prevenir que se guarden datos incorrectos.
Ah ! una intersante, tambien peuden generar correos electronicos (del envio se encarga alguien mas).
Y eso es como lo que me acuerdo, espero haberte ayudado.
Sobre los índices, no quería comentar, pero …
Es un tema que debe ser tratado desde el principio del estudio de SQL, cuando generamos las tablas. Si bien no generando índices complejos, uno sencillo como el que ponen en el ejemplo.
Y a medida que el curso avanza, ir profundizando poco a poco.
Para finalizar solamente decir que la interface que usen debe permitirles generar los índices con el toque de un par de botones. (muchos los pintan como llaves) 🔑
Por favor una clase explicando esto, muchos de los que no manejamos bien el concepto lo agradeceriamos.
Hola compañero, si aún es tiempo, por favor revisa dos aportes que hice en esta clase que pueden ser de ayuda a la hora de entender estos conceptos.
Esto tambien puede ser de utilidad:
Ojo al dato, de como son llamados:
Un Trigger siempre responde aun evento.
En cambio un SP se ejecuta escribiendo especificcmante EXEC o EXECUTE
🤯 Siendo esto así ( companeros pilos y pilas) claro yo puedo escribir un Trigger que responda a un evento y Ejecute un SP.
Te explico ambos conceptos con ejemplos prácticos basados en el esquema de base de datos que veo en tu código.
### CREATE INDEX
Basado en tu schema de Prisma, aquí hay ejemplos útiles de índices:
\-- Índice para búsqueda rápida de conductores por estado
CREATEINDEX idx\_driver\_status ON Driver(status);\-- Índice compuesto para búsquedas de viajes por usuario y fecha
CREATEINDEX idx\_rides\_user\_date ON Rides(userId, cratedAt);\-- Índice para búsqueda de usuarios por número telefónico
CREATEINDEX idx\_user\_phone ONUser(phone\_number);
### TRIGGERS
Ejemplos de triggers basados en tu modelo de datos:
\--Trigger para actualizar estadísticas del conductor después de un nuevo viaje
CREATETRIGGERafter\_ride\_completion
AFTERUPDATEON Rides
FOR EACH ROWBEGIN  IF NEW.status = 'completed' AND OLD.status != 'completed' THEN  UPDATE Driver   SET   totalRides = totalRides + 1,  totalEarning = totalEarning + NEW.charge  WHERE id = NEW.driverId;  END IF;END;\--Trigger para actualizar calificación promedio
CREATETRIGGERafter\_ride\_rating
AFTERUPDATEON Rides
FOR EACH ROWBEGIN  IF NEW.rating IS NOT NULL AND OLD.rating IS NULL THEN  UPDATE Driver  SET ratings = (  SELECT AVG(rating)  FROM Rides  WHERE driverId = NEW.driverId  AND rating IS NOT NULL  )  WHERE id = NEW.driverId;  END IF;END;
Estos ejemplos están basados en tu schema que veo en:
Los índices mejorarían el rendimiento de las consultas frecuentes en tu aplicación, mientras que los triggers mantendrían automáticamente actualizadas las estadísticas de conductores y usuarios.
### Consideraciones:
1. Los índices mejoran la velocidad de lectura pero pueden ralentizar las escrituras
2. Los triggers pueden impactar el rendimiento si no están bien optimizados
3. En MongoDB (que es tu base de datos actual) la sintaxis sería diferente, pero los conceptos son similares
Dato demasiado importante para implementarlo en proyectos con demasiados registros. Nice