sql >> Database >  >> RDS >> Oracle

Oracle 11G - Prestatie-effect van indexering bij invoegen

Het is waar dat het sneller is om een ​​tabel aan te passen als je niet ook een of meer indexen hoeft te wijzigen en eventueel ook constraint-checking hoeft uit te voeren, maar het is ook grotendeels irrelevant als je die indexen dan moet toevoegen. U moet rekening houden met de volledige wijziging van het systeem die u wilt doorvoeren, niet slechts met een enkel onderdeel ervan.

Het is duidelijk dat als u een enkele rij toevoegt aan een tabel die al miljoenen rijen bevat, het dwaas zou zijn om indexen te laten vallen en opnieuw op te bouwen.

Maar zelfs als u een volledig lege tabel heeft waaraan u enkele miljoenen rijen gaat toevoegen, kan het nog steeds langzamer zijn om de indexering uit te stellen tot daarna.

De reden hiervoor is dat een dergelijke invoeging het beste kan worden uitgevoerd met het directe pad-mechanisme, en wanneer u directe pad-invoegingen gebruikt in een tabel met indexen erop, worden tijdelijke segmenten gebouwd die de gegevens bevatten die nodig zijn om de indexen te bouwen (data plus rowids ). Als die tijdelijke segmenten veel kleiner zijn dan de tabel die u zojuist hebt geladen, dan zijn ze ook sneller te scannen en om de indexen op te bouwen.

het alternatief, als u vijf indexen op de tafel heeft, is om vijf volledige tabelscans te maken nadat u deze hebt geladen om de indexen te bouwen.

Uiteraard zijn er hier enorme grijze gebieden, maar goed gedaan voor:

  1. Vragende autoriteit en algemene vuistregels, en
  2. Echte tests uitvoeren om de feiten in uw eigen geval vast te stellen.

Bewerken:

Verdere overwegingen -- u voert een back-up uit terwijl de indexen worden verwijderd. Nu, na een noodherstel, moet u een script hebben dat verifieert dat alle indexen aanwezig zijn, wanneer u het bedrijf in uw nek laat ademen om het systeem weer up-to-date te krijgen.

Als u absoluut vastbesloten was om geen indexen bij te houden tijdens een bulklading, laat de indexen dan niet vallen - schakel ze in plaats daarvan uit. Hierdoor blijven de metagegevens voor het bestaan ​​en de definitie van de index behouden en is een eenvoudiger herbouwproces mogelijk. Pas op dat u indexen niet per ongeluk opnieuw inschakelt door de tabel af te kappen, omdat hierdoor uitgeschakelde indexen weer worden ingeschakeld.



  1. Kan MySQL Cluster een terabyte database aan?

  2. Hoe alle tabelnamen van een bepaalde mysql-database in php . weer te geven

  3. MyBatis gebruiken met de Oracle XMLType-functie bestaatNode()

  4. Grootste niet-nulkolom