När det gäller indexfrågorna är ett index inte bara önskvärt, utan det är behövs att "påskynda" saker. Som jag förstår det (i "lekman"-termer) är funktionen hos ett index att påskynda sökningar och återställning av data i en tabell.
Skäl att använda index:
- Identifiera varje rad på varje tabell unikt (primärnyckeln är trots allt ett index)
- Indexen sorteras (även om data inte är det)
- Öppna sökningar och filter:Ett index gör återställningen av data snabbare, eftersom det "håller" placeringen av data i tabellen (det "bestämmer" vilken data du vill återställa). Det gör också enklare för databasmotorn att filtrera data (det är alltid snabbare och enklare att filtrera sorterat data än krypterad data)
- Optimera hur data återställs när du använder relaterade tabeller:Varje främmande nyckel måste indexeras för att påskynda frågorna som involverar primär- och främmande nyckelrelationer
Några "tumregler" jag använder för att bestämma vilka fält som ska indexeras:
- Varje primärnyckel indexeras (det uppenbara). ett:en primärnyckel måste vara unik och inte null)
- Varje främmande nyckel måste indexeras (för att göra relationer mellan primär och främmande nyckel effektiva)
- Varje siffer- eller datumfält som jag behöver göra sökningar på måste indexeras. Som sagt, jag försöker undvika
double
(eller någon annan numerisk flyttaltyp) fält som ska indexeras, eftersom de vanligtvis används för att lagra värden som inte är avsedda att sökas i. - Varje
char
ellervarchar
fält som jag behöver göra sökningar på måste indexeras. Försök att undvika index påtext
fält, eftersom de kan ha mycket stora värden i dem. - Undvik indexering binär (
blob
) fält... det är ingen mening - Gör inte faller i frestelsen att indexera allt. Ta dig tid att bestämma vilka fält som måste indexeras och vilka fält som inte får indexeras.