sql >> Databasteknik >  >> RDS >> Mysql

Vad kostar det att indexera flera db-kolumner?

Indexera det som verkar mest logiskt (det borde förhoppningsvis vara uppenbart, till exempel en kund-ID-kolumn i tabellen KUNDER).

Kör sedan din applikation och samla statistik med jämna mellanrum för att se hur databasen presterar. RUNSTATS på DB2 är ett exempel, jag hoppas att MySQL har ett liknande verktyg.

När du hittar några ofta körda frågor som genomsöker hela tabeller (eller tar för lång tid av andra skäl), och först då , bör du lägga till fler index. Det hjälper inte att optimera en en gång i månaden-kör-vid-midnatt-förfrågan så att den kan avslutas 12:05 istället för 12:07. Det är dock en enorm förbättring att minska en kundvänd förfrågan från 5 sekunder ner till 2 sekunder (det är fortfarande för långsamt, kundvända frågor bör vara undersekund om möjligt).

Fler index tenderar att sakta ner infogning och snabba upp frågor. Så det är alltid en balansgång. Det är därför du bara lägger till index som ett specifikt svar på ett problem. Allt annat är för tidig optimering och bör undvikas.

Besök dessutom de index du redan har med jämna mellanrum för att se om de fortfarande behövs. Det kan vara så att frågorna som fick dig att lägga till dessa index inte längre körs tillräckligt ofta för att motivera det.

För att vara ärlig, tror jag inte att indexering av tre kolumner i en tabell kommer att leda till att du lider om du inte planerar att lagra ett riktigt stort antal rader :-) - indexering är ganska effektivt.

Efter din redigering som säger:

Mitt svar är att 200 poster om dagen är ett extremt litet värde för en databas, du kommer definitivt inte ha något att oroa dig för med dessa tre index.

Bara den här veckan importerade jag transaktioner värda en dag till en av våra databastabeller på jobbet och den innehöll 2,1 miljoner poster (vi får minst en transaktion per sekund under hela dagen från 25 separata maskiner). Och den har fyra separata sammansatta nycklar, vilket är något mer intensivt än dina tre individuella tangenter.

Nu givetvis, det är på en DB2-databas men jag kan inte föreställa mig att IBM är mycket bättre än MySQL-folket att MySQL bara kan hantera mindre än 0,01 % av DB2-belastningen.



  1. Hur man kommer åt arrayelement

  2. MySQL långsam fråga - Väntar på query cache lock

  3. Använder du SQL Server tidsdatatyp i C#.NET-applikationen?

  4. Eliminera MySQL Split-Brain i multimolndatabaser