Bases de datos

Y más índices

¿Por qué indexamos?

Primer acto: El descubrimiento

¿Por qué indexamos?

Primer acto: El descubrimiento

¿Por qué indexamos?

Primer acto: El descubrimiento

¿Por qué indexamos?

Segundo acto: El misterio

¿Por qué indexamos?

Segundo acto: El misterio

¿Por qué indexamos?

Tercer acto: El descubrimiento

¿Por qué indexamos?

Tercer acto: El descubrimiento

¿Por qué indexamos?

Cuarto acto: La solución

¿Por qué indexamos?

Cuarto acto: La solución

¿Por qué indexamos?

Quinto acto: El resultado

¿Por qué indexamos?

Epílogo: La razón

¿Por qué indexamos?

Epílogo: La razón

Base de datos employees

Como decía Jack, el destripador, vámonos por partes:

  1. Descarga y descomprime el archivo employees.zip
    • Debe quedar un archivo de nombre employees.sql
    • Toma nota de toda la ruta al archivo
      • Por ejmplo: C:\Descargas\employees.sql
  2. Crea una base de datos nueva, desde el prompt (la línea de comandos) de la base de datos o tu interfaz gráfica de elección,preferentemente con el nombre employees
    • Ojo, una cosa es la línea de comandos/consola/terminal del sistema operativo (la que corresponde la disco duro y la carpeta donde te encuentres) y otra cosa es la línea de comandos de la base de datos
      • Si es algo como C:\carpeta\carpeta es la línea de comandos del SO
      • Si es algo como mysql> es la línea de comandos de la base de datos

Base de datos employees

  1. Desde una línea de comandos del sistema operativo ejecuta el comando que corresponda a tu instalación:
    • mysql
    • mariadb
  2. Si la respuesta al comando anterior fue algo de tipo "no se reconoce el comando" quiere decir que la ruta al ejecutable no es reconocida por el sistema operativo
    • Puedes agregarla al PATH de las variables de sistema
    • Puedes navegar hasta la carpeta que contiene el archivo mysql.exe  o mariadb.exe y abrir la línea de comandos desde esa carpeta o puedes navegar en la línea de comando hasta esa carpeta

Base de datos employees

  1. Desde una línea de comando del sistema operativo ajusta y ejecuta el siguiente comando, de acuerdo al caso:
    • mysql -u [username] [base_de_datos] <  [ruta_al_archivo_employees.sql]
    • mariadb -u [username] [base_de_datos] <  [ruta_al_archivo_employees.sql]
    • Suponiendo que mi nombre de usuario de la base de datos sea "root", el ejecutable de mi SGBD esté en la ruta "C:\mysql\bin\mysql.exe" y el archivo SQL esté en "C:\Descargas\employees.sql" y mi base de datos sea "employees", entonces:
      1. Abro una línea de comando de sistema operativo en el directorio "C:\mysql\bin"
        • Si el comando mysql en el paso 3 fue reconocido no es necesario ir hasta la carpeta "C:\mysql\bin"
      2. Ejecuto el comando:
        mysql -u root employees <  "C:\Descargas\employees.sql"

Base de datos employees

  1. Verifica que tengas 6 tablas creadas:
    • departments
    • dept_emp
    • dept_manager
    • employees
    • salaries
    • titles
  2. El diagrama relacional de la base de datos se muestra en el siguiente slide

Base de datos employees

Solo para tener algo de referencia:

Base de datos employees

Si ejecutamos la siguiente consulta:

EXPLAIN SELECT `first_name`, `last_name`, `gender` FROM `employees` WHERE `first_name` = 'Aiman'; 

Obtenemos algo así:

Base de datos employees

Agreguemos un índice:

CREATE INDEX nombre ON employees (`first_name`); 

Revisemos los índices de la tabla:

SHOW indexes FROM employees;

Y deberíamos ver algo así:

Base de datos employees

Si ejecutamos, de nuevo, la consulta:

EXPLAIN SELECT `first_name`, `last_name`, `gender` FROM `employees` WHERE `first_name` = 'Aiman'; 

Obtenemos algo así:

Base de datos employees

Comparemos:

Sin índice

Con índice

Base de datos employees

Ahora una búsqueda usando dos campos:

EXPLAIN SELECT `first_name`,`last_name`, `gender` FROM `employees`
WHERE `first_name` = "Ronnie" AND `last_name` = "Conde"; 

Regresa also así:

Base de datos employees

Si creamos un índice compuesto:

CREATE INDEX nombre_completo ON employees (`first_name`, `last_name`); 

La misma consulta regresa algo así:

Base de datos employees

Comparemos:

Sin índice

Con índice

Base de datos employees

Veamos que pasa con dos tablas:

EXPLAIN SELECT
    employees.first_name,
    employees.last_name,
    employees.gender,
    salaries.salary,
    salaries.from_date,
    salaries.to_date
FROM
    salaries
INNER JOIN employees ON salaries.emp_no = employees.emp_no
WHERE
    employees.last_name = "Karlin" AND salaries.salary >= 30000 AND salaries.salary <= 80000

Obtenemos algo así:

Base de datos employees

Después de agregar un índice en el apellido y otro en el salario nos queda:

Sin índices

Con índices

Algunas referencias

Normalmente hay que leer la documentación formal sobre los índices para poder entenderlos del todo (o, al menos para familiarizarse) pero en lo que se acostumbran a leer ese tipo de documentos:

Bases de datos: Y más índices

By Gilberto 🦁

Bases de datos: Y más índices

Y más índices

  • 86