sql >> Database >  >> RDS >> Mysql

Hoe groot is te groot voor een MySQL-tabel?

Er is geen goede algemene oplossing voor de vraag "Hoe groot is te groot" - dergelijke zorgen zijn vaak afhankelijk van wat u met uw gegevens doet en wat uw prestatieoverwegingen zijn.

Er zijn enkele fundamentele limieten voor tafelafmetingen. U kunt niet meer dan 1000 kolommen hebben. Uw records kunnen niet groter zijn dan 8k elk. Deze limieten veranderen afhankelijk van de database-engine. (Degene hier zijn voor InnoDB.)

Het klinkt alsof je verschillende datasets in één tabel hebt samengevoegd. U hebt waarschijnlijk enkele velden die u vertellen op welke gegevensset deze record betrekking heeft, samen met enkele gegevensvelden en wat tijdstempelinformatie. Dat is geen erg breed record (tenzij je bijvoorbeeld alle invoerparameters van elk verzoek registreert.) Je grootste probleem zal zijn met selectiviteit . Het zal een uitdaging zijn om deze tabel op een zinvolle manier te indexeren. Als uw gemeenschappelijke velden selectief genoeg kunnen zijn om ze te gebruiken om naar de gewenste records te gaan zonder de tabel te raadplegen, is dat een enorm pluspunt. (Zie tabel scan)

Voor zoveel records per dag (eigenlijk twee per seconde de hele dag, en ik neem aan dat je een piekbelastingperiode hebt waar deze veel hoger is), moet je er ook voor zorgen dat je specifiek kijkt naar optimalisaties op verbetering van de invoegsnelheid . Als algemene regel geldt dat meer indexen =langzamere invoegingen. Als je kunt, overweeg dan om verouderde records volledig naar een andere tabel te archiveren. Op eerdere werkplekken hebben we een archiveringsstrategie van Vorige maand, Voorafgaande drie maanden, Voorafgaande zes maanden gebruikt, elk in afzonderlijke tabellen. Een ander idee is om oudere records te verwijderen. Veel omgevingen hebben simpelweg geen informatie meer nodig na een bepaalde datum. Vasthouden aan het loggen van records van drie maanden geleden is vaak te duur.

Vergeet tot slot de fysieke opslag niet van uw tafel. Hoe dunner uw records zijn, hoe minder fysieke IO nodig is om een ​​record te lezen (of in te voegen). U kunt uw indexen opslaan op een aparte fysieke harde schijf. Als er veel overtollige gegevens in uw records zijn, kan het opslaan van de tabel in feite een snelheidsverhoging zijn. Als u wat geld te besteden heeft, overweeg dan de waarde van een goede RAID-array voor het strippen van uw gegevens.

Dus, om je basisvraag te beantwoorden:het zijn veel platen, maar met een goed oog voor tuning zal het geen probleem zijn.



  1. SQL ALTER TABLE-syntaxis - weergegeven door DBMS

  2. Onjuiste tekenreekswaarde:'\xEF\xBF\xBD' voor kolom

  3. Verbinding maken met MySQL vanuit Eclipse (CDT)

  4. javax.naming.NoInitialContextException met mysql DataSource