Hinzufügen weiterer Daten und Analysieren der Sortierung
Fügen wir weitere Daten hinzu, um die Analyse des Abfrageplans (Query Plan) aussagekräftiger zu gestalten. Fügen Sie die folgenden Daten in die Tabelle employees
(Mitarbeiter) ein:
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');
Analysieren wir nun eine komplexere Abfrage, die eine Sortierung beinhaltet. Angenommen, Sie möchten alle Mitarbeiter in der Abteilung 'Sales' finden und diese nach Nachnamen sortieren. Sie können die folgende Abfrage verwenden:
SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
Analysieren Sie den Abfrageplan:
EXPLAIN QUERY PLAN SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
Die Ausgabe könnte wie folgt aussehen:
QUERY PLAN
`--SCAN employees USING INDEX idx_lastname
In diesem Fall führt SQLite einen vollständigen Tabellenscan (Full Table Scan) durch und sortiert dann die Ergebnisse.
Erstellen wir einen Index für die Spalte department
(Abteilung):
CREATE INDEX idx_department ON employees (department);
Analysieren Sie den Abfrageplan nun erneut:
EXPLAIN QUERY PLAN SELECT * FROM employees WHERE department = 'Sales' ORDER BY last_name;
Die Ausgabe könnte sich ändern in:
QUERY PLAN
|--SEARCH employees USING INDEX idx_department (department=?)
`--USE TEMP B-TREE FOR ORDER BY
Jetzt verwendet SQLite den Index idx_department
, um die Mitarbeiter in der Abteilung 'Sales' zu finden, muss aber die Ergebnisse weiterhin sortieren.