Agregar más datos y analizar la ordenación (Sorting)
Vamos a insertar más datos para que el análisis del plan de consulta (query plan analysis) sea más significativo. Inserta los siguientes datos en la tabla employees
:
INSERT INTO employees (first_name, last_name, email, department) VALUES
('Alice', 'Johnson', '[email protected]', 'HR'),
('Bob', 'Williams', '[email protected]', 'Finance'),
('Charlie', 'Brown', '[email protected]', 'IT'),
('David', 'Miller', '[email protected]', 'Sales'),
('Eve', 'Wilson', '[email protected]', 'Marketing'),
('John', 'Taylor', '[email protected]', 'Engineering'),
('Jane', 'Anderson', '[email protected]', 'HR'),
('Robert', 'Thomas', '[email protected]', 'Finance'),
('Emily', 'Jackson', '[email protected]', 'IT'),
('Michael', 'White', '[email protected]', 'Sales');
Ahora, analicemos una consulta más compleja que implica la ordenación. Supongamos que deseas encontrar a todos los empleados del departamento 'Sales' y ordenarlos por apellido. Puedes usar la siguiente consulta:
SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
Analiza el plan de consulta:
EXPLAIN QUERY PLAN SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
La salida podría verse así:
QUERY PLAN
`--SCAN employees USING INDEX idx_lastname
En este caso, SQLite está realizando un escaneo completo de la tabla (full table scan) y luego ordenando los resultados.
Creemos un índice en la columna department
:
CREATE INDEX idx_department ON employees (department);
Ahora, analiza el plan de consulta nuevamente:
EXPLAIN QUERY PLAN SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
La salida podría cambiar a:
QUERY PLAN
|--SEARCH employees USING INDEX idx_department (department=?)
`--USE TEMP B-TREE FOR ORDER BY
Ahora SQLite está utilizando el índice idx_department
para encontrar a los empleados del departamento 'Sales', pero aún necesita ordenar los resultados.