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

MySQL Row Format:Forskellen mellem fast og dynamisk?

Forskellen betyder egentlig kun noget for MyISAM, andre lagringsmotorer er ligeglade med forskellen.EDIT : Mange brugere kommenterede, at InnoDB er ligeglad:link 1 af dampdrevet , link 2 af Kaan .

Med MyISAM med rækker med fast bredde er der et par fordele:

  1. Ingen rækkefragmentering:Det er muligt med rækker med variabel bredde at få enkelte rækker opdelt i flere sektioner på tværs af datafilen. Dette kan øge disksøgninger og bremse operationer. Det er muligt at defragmentere det med OPTIMIZE TABLE, men det er ikke altid praktisk.

  2. Datafil pointerstørrelse:I MyISAM er der et koncept med en datafil pointer, som bruges, når den skal referere til datafilen. For eksempel bruges dette i indekser, når de refererer til, hvor rækken faktisk er til stede. Med faste breddestørrelser er denne pointer baseret på rækkeforskydningen i filen (dvs. rækker er 1, 2, 3 uanset deres størrelse). Med variabel bredde er markøren baseret på byteforskydningen (dvs. rækker kan være 1, 57, 163). Resultatet er, at med store tabeller skal markøren være større, hvilket potentielt tilføjer meget mere overhead til bordet.

  3. Nemmere at rette i tilfælde af korruption. Da hver række har samme størrelse, er det meget nemmere at reparere, hvis din MyISAM-tabel bliver beskadiget, så du vil kun miste data, der faktisk er beskadiget. Med variabel bredde er det i teorien muligt, at pointerne med variabel bredde bliver rodet sammen, hvilket kan resultere i, at data bliver spærret på en dårlig måde.

Nu er den primære ulempe ved fast bredde, at den spilder mere plads. For eksempel skal du bruge CHAR-felter i stedet for VARCHAR-felter, så du ender med at optage ekstra plads.

Normalt vil du ikke have meget valg i formatet, da det er dikteret baseret på skemaet. Det kan dog være værd, hvis du kun har et par varchar'er eller en enkelt klat/tekst for at forsøge at optimere mod dette. Overvej for eksempel at skifte den eneste varchar til en char, eller opdel klatten i sin egen tabel.

Du kan læse endnu mere om dette på:

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

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



  1. Erstat NonASCII-tegn i MYSQL

  2. Læser tegn som č ć đ š ž fra MySql-databasen

  3. Forældet:mysql_connect()

  4. SQLite forbedret forespørgselssyntaks på Android