sql >> Database >  >> RDS >> Mysql

MySQL-rijindeling:verschil tussen vast en dynamisch?

Het verschil is eigenlijk alleen van belang voor MyISAM, andere storage-engines geven niet om het verschil.EDIT: Veel gebruikers merkten op dat InnoDB er wel om geeft:link 1 door stoomaangedreven , link 2 door Kaan .

Met MyISAM met rijen met vaste breedte zijn er een paar voordelen:

  1. Geen rijfragmentatie:met rijen met variabele breedte is het mogelijk om enkele rijen op te splitsen in meerdere secties in het gegevensbestand. Dit kan het zoeken naar schijven verhogen en bewerkingen vertragen. Het is mogelijk om het te defragmenteren met OPTIMIZE TABLE, maar dit is niet altijd praktisch.

  2. Aanwijzergrootte gegevensbestand:In MyISAM is er een concept van een gegevensbestandaanwijzer die wordt gebruikt wanneer deze naar het gegevensbestand moet verwijzen. Dit wordt bijvoorbeeld gebruikt in indexen wanneer ze verwijzen naar waar de rij daadwerkelijk aanwezig is. Bij vaste breedtematen is deze aanwijzer gebaseerd op de rij-offset in het bestand (d.w.z. rijen zijn 1, 2, 3 ongeacht hun grootte). Met variabele breedte is de aanwijzer gebaseerd op de byte-offset (dwz rijen kunnen 1, 57, 163 zijn). Het resultaat is dat bij grote tabellen de aanwijzer groter moet zijn, wat in potentie veel meer overhead aan de tafel toevoegt.

  3. Makkelijker op te lossen in het geval van corruptie. Aangezien elke rij even groot is, is het veel gemakkelijker te repareren als uw MyISAM-tabel beschadigd raakt, zodat u alleen gegevens verliest die daadwerkelijk beschadigd zijn. Met variabele breedte is het in theorie mogelijk dat de wijzers met variabele breedte in de war raken, wat kan resulteren in het op een slechte manier doorspoelen van gegevens.

Het belangrijkste nadeel van een vaste breedte is dat het meer ruimte verspilt. U moet bijvoorbeeld CHAR-velden gebruiken in plaats van VARCHAR-velden, zodat u uiteindelijk extra ruimte in beslag neemt.

Normaal gesproken heb je niet veel keuze in het formaat, omdat het wordt gedicteerd op basis van het schema. Het kan echter de moeite waard zijn als je maar een paar varchar's of een enkele blob/tekst hebt om te proberen hiervoor te optimaliseren. Overweeg bijvoorbeeld om de enige varchar in een char te veranderen, of de blob in zijn eigen tabel te splitsen.

U kunt hier nog meer over lezen op:

http://dev.mysql.com/doc/refman /5.0/en/static-format.html

http://dev.mysql.com/doc/refman /5.0/en/dynamic-format.html



  1. Krijg polygonen dicht bij een lat,long in MySQL

  2. Instructie invoegen die controleert op duplicaat vóór invoegen

  3. alfa en numeriek splitsen met sql

  4. PHP (MySQL)-fout:waarschuwing:mysql_num_rows() verwacht dat parameter 1 resource is