sql >> Database >  >> RDS >> Oracle

Hoe verbeteren records met een vaste lengte en velden met een vaste lengte de databaseprestaties?

Vereenvoudigde, conceptuele, niet-database-specifieke uitleg:

Wanneer de maximaal mogelijke recordlengte van tevoren bekend is, kan het einde van het record/het begin van het volgende record in constante tijd worden gevonden. Dit komt omdat die locatie berekenbaar is met behulp van eenvoudige toevoeging, zeer analoog aan array-indexering. Stel je voor dat ik int . gebruik s als verwijzingen naar records, en dat de recordgrootte een integer-constante is die ergens is gedefinieerd. Om vervolgens van de huidige opnamelocatie naar de volgende te gaan:

int current_record = /* whatever */;
int next_record = current_record + FIXED_RECORD_SIZE;

Dat is het!

Als alternatief, wanneer u string-terminated (of anderszins begrensde) records en velden gebruikt, kunt u zich voorstellen dat het volgende veld/record wordt gevonden door een lineaire tijdscan, die naar elk teken moet kijken totdat het scheidingsteken is gevonden. Zoals eerder,

char DELIMITER = ','; // or whatever
int current_record = /* whatever */;
int next_record = current_record;
while(character_at_location(next_record) != DELIMITER) {
    next_record++;
}

Dit is misschien een vereenvoudigde of naïeve versie van de real-world implementatie, maar het algemene idee staat nog steeds:je kunt niet gemakkelijk dezelfde bewerking in constante tijd uitvoeren, en zelfs als het constante tijd zou zijn, is het onwaarschijnlijk dat het zo snel gaat als het uitvoeren van een enkele toevoegingsbewerking.



  1. Sessie-instelling om geïndexeerde weergaven te ondersteunen

  2. Count(*) gebruiken vs num_rows

  3. PostgreSQL-beveiliging standaardiseren in multi-cloudomgevingen

  4. Stel het gegevenstype van een cel expliciet in als tekst voor getalwaarden