sql >> Databasteknik >  >> RDS >> Mysql

Hur dyra är JOINs i SQL? Och/eller, vad är avvägningen mellan prestanda och normalisering?

Den bästa praxisen är att alltid börja med 3NF och överväg bara denormalisering om du hittar ett specifikt prestandaproblem.

Prestanda är bara ett av de problem du har att hantera med databaser. Genom att duplicera data riskerar du att tillåta inkonsekventa data att finnas i din databas, vilket omintetgör en av kärnprinciperna för relationsdatabaser, konsekvens (C i ACID ).

Ja, sammanfogningar har en kostnad, det går inte att komma runt det. Men kostnaden är vanligtvis mycket mindre än du tror, ​​och kan ofta översvämmas av andra faktorer som nätverksöverföringstider. Genom att se till att de relevanta kolumnerna är korrekt indexerade kan du undvika många av dessa kostnader.

Och kom ihåg optimeringsmantrat:mäta, gissa inte! Och mäta i en produktionsliknande miljö. Och behåll mätning (och justering) regelbundet - optimering är bara en uppsättning och glöm operation om ditt schema och data aldrig ändras (mycket osannolikt).

Återgång för prestanda kan vanligtvis göras säker genom att använda triggers för att upprätthålla konsekvens. Detta kommer naturligtvis att sakta ner dina uppdateringar, men kan fortfarande göra att dina val går snabbare.



  1. Är pymysql-anslutningstråden säker? Är pymysql markörtråd säker?

  2. Kombinera fält från olika rader på skick

  3. Ska det finnas en SQLiteOpenHelper för varje tabell i databasen?

  4. Visa poster från nu() till nästa 7 dagar i mysql