Gdy Twoja tabela z użytkownikami urośnie do miliona rekordów, proste zapytanie SELECT może nagle zacząć wykonywać się kilka sekund. W świecie aplikacji internetowych to wieczność, która zniechęca użytkowników i obciąża procesor serwera. Rozwiązaniem tego problemu są indeksy.
Wyobraź sobie indeks w bazie jako alfabetyczny spis treści na samym końcu grubej książki. Zamiast czytać całą książkę strona po stronie (co w świecie SQL nazywamy skanowaniem całej tabeli - Table Scan), sprawdzasz w spisie, na której stronie znajduje się interesujące Cię hasło, i od razu tam przechodzisz. W bazie danych indeks to specjalna, uporządkowana struktura danych (najczęściej w formie tzw. B-drzewa), która przechowuje wartości wybranej kolumny wraz z szybkimi wskaźnikami do fizycznych wierszy w tabeli.
Złota zasada optymalizacji: Indeksujemy zawsze klucze obce oraz te kolumny, po których najczęściej filtrujemy dane (czyli te, które regularnie lądują w klauzuli WHERE), np. adres e-mail przy logowaniu do systemu.