Informationen du har i frågan om MyISAM är rätt i mål. Jag skulle dock vilja ta upp dina två ytterligare frågor:
SENASTE FRÅGA
Enligt boken
Kapitel 10:"Lagringsmotorer" Sida 196 Punkt 7 säger
Baserat på det stycket skrivs den gamla posten över med länkdata endast om den nya datan som ska infogas inte får plats i det tidigare allokerade blocket. Detta kan resultera i många uppsvällda rader.
YTTERLIGARE FRÅGA
Från mitt tidigare svar skulle det finnas massor av block som har
- utrymmesblock
- längden på posten
- antalet oanvända byte i blocket
- NULL-värdesindikatorflaggor
- möjligen en pekare till postens fortsättning om posten inte passade in i det tidigare skapade utrymmet och måste delas upp
Sådana postlänkar skulle börja längst fram på varje rad som har överdimensionerade data som infogas. Detta kan blåsa upp en MyISAM-tabell .MYD
fil mycket snabbt.
FÖRSLAG
Standardradformatet för en MyISAM är Dynamic. När en tabell är dynamisk och upplever många INSERT, UPDATES och DELETEs, skulle en sådan tabell behöva optimeras med
OPTIMIZE TABLE mytable;
Det finns ett alternativ:ändra tabellens radformat till Fast. På så sätt är alla rader lika stora. Så här gör du radformatet Fixed:
ALTER TABLE mytable ROW_FORMAT=Fixed;
Även med ett fast radformat måste det ta tid att hitta en tillgänglig post, men tiden skulle vara O(1) söktid (i lekmans termer skulle det ta lika lång tid att hitta en tillgänglig post oavsett hur många rader tabellen har eller hur många raderade rader det finns). Du kan kringgå det steget genom att aktivera concurrent_insert enligt följande:
Lägg till detta i my.cnf
[mysqld]
concurrent_insert = 2
MySQL-omstart krävs inte. Kör bara
mysql> SET GLOBAL concurrent_insert = 2;
Detta skulle få alla INSERT att gå till baksidan av tabellen utan att leta efter ledigt utrymme.
Fördel med tabeller med fasta rader
- INSERT, UPDATES och DELETEs skulle vara något snabbare
- SELECT är 20–25 % snabbare
Här är några av mina inlägg om att SELECT är snabbare för radformat som fixas
May 03, 2012
:Vilket är snabbare, InnoDB eller MyISAM?Sep 20, 2011
:Best of MyISAM och InnoDBMay 10, 2011
:Vad är prestandaeffekten av att använda CHAR vs VARCHAR på ett fält med fast storlek?
Nackdel med tabeller med fasta rader
I de flesta fall, när du kör ALTER TABLE mytable ROW_FORMAT=Fixed;
, tabellen kan växa 80-100%. .MYI
fil (indexsidor för MyISAM-tabellen) skulle också växa i samma takt.
EPILOG
Om du vill ha snabbhet för MyISAM-bord och kan leva med större bord, skulle mina alternativa förslag behövas. Om du vill spara utrymme för varje MyISAM-tabell, lämna radformatet som det är (Dynamiskt). Du måste komprimera tabellen med OPTIMIZE TABLE mytable;
oftare med dynamiska tabeller.