A separate data structure:
WHEREJOINORDER BYGROUP BYColumn has less data options, like only MALE / FEMALE
WHERE function(column) = ...
WHERE YEAR(created_at) = 2025created_atYEAR() for every rowLeading % in LIKE
%abc has no known prefix → cannot navigate treeLIKE '%abc' ❌ no index
LIKE 'abc%' ✅ index usable
=,<, >, ORDER BY, LIKE 'abc%'// Example of index on email:
[m@]
/ \\
[f@] [t@]
/ \\ / \\
[a@][c@][e@] [n@][r@][z@]
Behind the scenes:
SELECT * FROM users WHERE email = '[email protected]';
idx_emailClustered Index (InnoDB primary key)