Добавление данных и анализ сортировки
Давайте добавим больше данных, чтобы анализ плана запроса (query plan analysis) был более информативным. Вставьте следующие данные в таблицу 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');
Теперь давайте проанализируем более сложный запрос, включающий сортировку. Предположим, вы хотите найти всех сотрудников в отделе 'Sales' (продажи) и отсортировать их по фамилии. Вы можете использовать следующий запрос:
SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
Проанализируйте план запроса:
EXPLAIN QUERY PLAN SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
Вывод может выглядеть так:
QUERY PLAN
`--SCAN employees USING INDEX idx_lastname
В этом случае SQLite выполняет полное сканирование таблицы (full table scan), а затем сортирует результаты.
Давайте создадим индекс для столбца department (отдел):
CREATE INDEX idx_department ON employees (department);
Теперь проанализируйте план запроса еще раз:
EXPLAIN QUERY PLAN SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
Вывод может измениться на:
QUERY PLAN
|--SEARCH employees USING INDEX idx_department (department=?)
`--USE TEMP B-TREE FOR ORDER BY
Теперь SQLite использует индекс idx_department для поиска сотрудников в отделе 'Sales', но ему все равно нужно сортировать результаты.