sql >> Database >  >> RDS >> Mysql

Wat zijn de kosten van het indexeren van meerdere db-kolommen?

Indexeer wat het meest logisch lijkt (dat zou hopelijk duidelijk moeten zijn, bijvoorbeeld een klant-ID-kolom in de tabel KLANTEN).

Voer vervolgens uw toepassing uit en verzamel periodiek statistieken om te zien hoe de database presteert. RUNSTATS op DB2 is een voorbeeld, ik hoop dat MySQL een soortgelijk hulpmiddel heeft.

Als u merkt dat sommige vaak uitgevoerde zoekopdrachten volledige tabelscans uitvoeren (of om andere redenen te lang duren), en alleen dan , moet u meer indexen toevoegen. Het heeft weinig zin om een ​​zoekopdracht die eenmaal per maand om middernacht wordt uitgevoerd, te optimaliseren, zodat deze om 12:05 uur kan eindigen in plaats van om 12:07 uur. Het is echter een enorme verbetering om een ​​klantgerichte zoekopdracht terug te brengen van 5 seconden naar 2 seconden (dat is nog steeds te traag, klantgerichte zoekopdrachten moeten indien mogelijk minder dan een seconde duren).

Meer indexen hebben de neiging om invoegingen te vertragen en zoekopdrachten te versnellen. Het is dus altijd een evenwichtsoefening. Daarom voegt u alleen indexen toe als reactie op een probleem. Al het andere is voortijdige optimalisatie en moet worden vermeden.

Bekijk daarnaast regelmatig de indexen die u al heeft om te zien of ze nog nodig zijn. Het kan zijn dat de zoekopdrachten die ervoor hebben gezorgd dat u die indexen hebt toegevoegd, niet meer vaak genoeg worden uitgevoerd om dit te rechtvaardigen.

Om eerlijk te zijn, geloof ik niet dat het indexeren van drie kolommen op een tabel je zal lijden, tenzij je van plan bent om echt enorme aantallen rijen op te slaan :-) - indexeren is behoorlijk efficiënt.

Na uw bewerking waarin staat:

Mijn antwoord is dat 200 records per dag een extreem kleine waarde is voor een database, je hoeft je zeker geen zorgen te maken met die drie indexen.

Deze week nog heb ik transacties ter waarde van een dag geïmporteerd in een van onze databasetabellen op het werk en deze bevatte 2,1 miljoen records (we krijgen de hele dag ten minste één transactie per seconde van 25 afzonderlijke machines). En het heeft vier afzonderlijke samengestelde toetsen, wat iets intensiever is dan uw drie afzonderlijke toetsen.

Toegegeven, dat is op een DB2-database, maar ik kan me niet voorstellen dat IBM dat is zo veel beter dan de MySQL-mensen dat MySQL slechts minder dan 0,01% van de DB2-belasting aankan.



  1. MySQL DATE_ADD gebruik, 5 dagen interval

  2. Fatale fout:oproep naar ongedefinieerde functie mysqli_connect() in... tijdens het verbinden van PHP 5.4.22 en MySQL 5.5 met Apache 2.4.7

  3. PL/SQL-blokprobleem:Geen gegevens gevonden fout

  4. Hoe kan ik een beperking maken om te controleren of een e-mail geldig is in postgres?