sql >> Database teknologi >  >> RDS >> Mysql

Hvor stor er for stor til et MySQL-bord?

Der er ikke nogen god generel løsning på spørgsmålet "Hvor stor er for stor" - sådanne bekymringer afhænger ofte af, hvad du laver med dine data, og hvad dine præstationsovervejelser er.

Der er nogle grundlæggende begrænsninger for bordstørrelser. Du kan ikke have mere end 1000 kolonner. Dine poster må ikke være større end 8k hver. Disse grænser ændres afhængigt af databasemotoren. (Dem her er til InnoDB.)

Det lyder som om du har flettet flere forskellige datasæt til en tabel. Du har sandsynligvis nogle felter, der fortæller dig, hvilket datasæt denne post vedrører, sammen med nogle datafelter og nogle tidsstempeloplysninger. Det er ikke en meget bred rekord (medmindre du f.eks. logger alle inputparametrene for hver anmodning). Dit hovedproblem vil være med selektivitet . Indeksering af denne tabel på en meningsfuld måde vil være en udfordring. Hvis dine almindelige felter kan være selektive nok til, at du kan bruge dem til at komme til de poster, du ønsker, uden at konsultere tabellen, vil det være et stort plus. (Jf. tabelscanning)

For så mange registreringer om dagen (dybest set to i sekundet hele dagen, og jeg går ud fra, at du har en spidsbelastningsperiode, hvor den er meget højere), vil du også være sikker på, at du specifikt ser på optimeringer på forbedring af indsættelseshastigheden . Som en generel regel er flere indekser =langsommere indsættelser. Hvis du kan, kan du overveje at arkivere forældede poster helt til en anden tabel. På tidligere arbejdspladser har vi brugt en arkiveringsstrategi med Sidste måned, Forud for tre måneder, Forud for seks måneder, hver i separate tabeller. En anden idé er at slette ældre poster. Mange miljøer har simpelthen ikke brug for information ud over en bestemt dato. Det er ofte alt for dyrt at hænge på logning af poster fra tre måneder siden.

Forsøm endelig ikke den fysiske opbevaring af dit bord. Jo tyndere dine poster er, jo mindre fysisk IO skal der forekomme for at læse (eller for den sags skyld indsætte) en post. Du kan gemme dine indekser på en separat fysisk harddisk. Hvis der er mange overflødige data i dine optegnelser, kan det faktisk være en hastighedsforøgelse, der lagrer tabellen komprimeret. Hvis du har lidt penge at forbrænde, så overvej værdien af ​​et godt RAID-array til at strippe dine data.

Så for at besvare dit grundlæggende spørgsmål:det er mange plader, men med et omhyggeligt øje med tuning vil det ikke være et problem.



  1. Hvordan tilpasser man konfigurationsfilen for det officielle PostgreSQL Docker-billede?

  2. Vælg en post, bare hvis den før den har en lavere værdi

  3. VÆLG distinkte værdier for flere rækker med samme id

  4. mysql TIME_WAIT; for mange forbindelser problem