Añadir Más Datos y Analizar la Ordenación
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', 'alice.johnson@example.com', 'HR'),
('Bob', 'Williams', 'bob.williams@example.com', 'Finance'),
('Charlie', 'Brown', 'charlie.brown@example.com', 'IT'),
('David', 'Miller', 'david.miller@example.com', 'Sales'),
('Eve', 'Wilson', 'eve.wilson@example.com', 'Marketing'),
('John', 'Taylor', 'john.taylor@example.com', 'Engineering'),
('Jane', 'Anderson', 'jane.anderson@example.com', 'HR'),
('Robert', 'Thomas', 'robert.thomas@example.com', 'Finance'),
('Emily', 'Jackson', 'emily.jackson@example.com', 'IT'),
('Michael', 'White', 'michael.white@example.com', '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.