Relationsdatabaser är utformade för att lagra många rader per tabell. Det finns en hel massa mekanismer för att underlätta stora bord, till exempel:
- Indexerar på valfri kombination av fält för att snabba upp sökningar
- Sidcachelagring så att vanliga sidor finns kvar i minnet
- Vertikal partitionering (kolumndatabaser) för ytterligare hastighetsbegäranden
- Avancerade algoritmer som hash-kopplingar och gruppbys (åtminstone i andra databaser än MySQL)
- Användning av flera processorer och diskar för att bearbeta frågor
Det finns en sak som är svårare när man lägger data i en enda tabell, och det är säkerheten. Och i själva verket är detta under vissa omständigheter ett primärt bekymmer och kräver i grunden att data finns i en separat tabell. Dessa applikationer är sällsynta och långt emellan.
För att ge ett exempel på hur dålig lagring av data i flera tabeller kan vara, föreställ dig att du i ditt system har en post per företag och du lagrar den i en tabell. Denna post lagrar information om företaget - något som namn, adress, vad som helst. Samtalet är 100 byte med information.
I ditt schema finns det en separat tabell för varje "företag", så det är en rad per tabell. Den posten kommer att finnas på en datasida. En datasida kan vara 16 kbyte, så du slösar bort cirka 15,9 kbyte för att lagra denna data. Att lagra 1000 sådana poster upptar 16 Mbyte istället för cirka 7 sidor värda (112 Kbyte). Det kan bli en betydande prestationsträff.
Dessutom, med flera tabeller tar du inte hänsyn till utmaningarna med att underhålla alla tabeller och säkerställa riktigheten av data i de olika tabellerna. Underhållsuppdateringar måste tillämpas på tusentals tabeller, istället för en handfull.