webForumDet fria alternativet

MyISAM vs. Innodb för mycket läsning och lite skrivning?

Databaser & SQL

1 svar · 1 463 visningar · startad av bassebhu

Medlem sedan nov. 20016 480 inlägg
Frågan#1

Hej alla glada!

De största skillnaderna vad jag har förstått är att innodb har transaktionsstöd och foreign keys (vad innebär det?). Men jag läser att myisam är mycket snabbare.

Jag håller på att bygga upp en databas med ca: 30 000 poster som mest kommer att hämtas när det är färdigt.

Det här med att MyISAM inte har transaktionsstöd. Är det nåt att oroa sig över egentligen? Vad är det som händer om inserten avbryts? Skapas en ofullständig post som ligger och slaskar och gör tabellen trasig eller vad?

Vad bör jag välja?

Tack!

Medlem sedan okt. 2006224 inlägg
#2

Det handlar väl egentligen vilket läs/skriv ration som kommer vara aktuellt för databasen. Dock ser jag väl flest fördelar med InnoDB då dom har row locking istället för table locking som MyISAM stödjer (tror det är självförklarande, men row locking innebär att när en SELECT/INSERT sker så låser databasen endast den aktuella raden/raderna medan table locking låser hela aktuella tabellen). Så om du kommer ha många läsningar/skrivningar samtidigt så kommer det bli långsammare på MyISAM.

Foreign keys representerar en relation till en annan tabell. Exempelvis:
User (Id, UserGroupId, Name, SaltedPassword)
UserGroup (Id, Name)

Där UserGroupId kolumnen i User tabellen är en foreign key.

Transaktionsstöd innebär att du kan ha flera commands i en transaktion och kan göra en rollback om något går fel. Lite Pseudokod:

Transaktion
Insert Into User(1, 1, "bassebhu")

Insert Into UserGroup(1, "Power User") <---- Blir fel av X anledning

Select All From User Join UserGroup On UserGroupId = Id
Avsluta Transaktion

När felet uppstår i det andra commandet kommer det att "rollbackas" d.v.s. den första inserten kommer backas. Detta görs för att det inte ska finnas felaktig data i databasen.

Vill inte säga att den ena är bättre än den andra utan jag föreslår istället att bygg upp databasen med testdata eller nått, men den mängd du förväntar dig, och gör lite benchmarks med båda databas engines och på så vis bestämma dig för vilken fungerar bäst i din situation.

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)