MyISAM als tabel opslagformaat in MySQL is hopeloos verouderd. Vernieuwingen en prestatieverbeteringen zijn er voor het InnoDB opslagformaat, en dat is wat je dus moet gebruiken. Vooral als je óók snelheid & performance belangrijk vindt!

Dit verhaal met MyISAM lijkt wel een beetje op Microsoft Office Access: het wil gewoon niet dood^Wweg! :-( Maar nu vraag je je vast af waar deze post precies over gaat, en wat MyISAM is.

MyISAM is een tabel storage engine in MariaDB- en MySQL-databaseserversoftware (leuk Scrabblewoord). Een storage engine, of het opslagformaat, bepaalt in welke structuur de data in een tabel opgeslagen wordt. Zo is ook InnoDB een opslagformaat. En InnoDB is een nieuwer opslagformaat.

Note: dit bericht is overgezet van een andere site van mij, omdat die website binnenkort een andere bestemming krijgt.

Nieuwer is beter, ik leg je graag uit waarom.

Het MyISAM opslagformaat is dusdanig verouderd, dat het niet meer doorontwikkeld wordt door MariaDB of MySQL. Alle vernieuwingen en prestatieverbeteringen zijn voor het InnoDB-formaat. Alleen al hierom wil je graag InnoDB gebruiken, toch?! Maar er is een tweede reden:

Tegenwoordig werken veel databaseservers in een cluster. Dit garandeert high-availability (hoge beschikbaarheid) en high-performance (hoge prestaties) van jouw MariaDB en MySQL databases.

Echter, MyISAM kan niet gebruikt worden in zo’n high-availability, high-performance databasecluster. Dus als jouw database nog MyISAM tabellen gebruikt, dan profiteer je niet van de voordelen van zo’n cluster. En het gebruiken van nieuwere technologieën, zoals een opslagformaat, is belangrijk voor het optimaliseren van jouw MySQL database.

Ik zie je denken:

Hoe herken ik MyISAM tabellen?

In veel online voorbeeldcode vind je nog CREATE TABLE voorbeelden zoals:

CREATE TABLE if not exists `gastenboek` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`user` VARCHAR(255) NOT NULL,
`mail` VARCHAR(255) NOT NULL,
`post` TEXT NOT NULL,
`url` VARCHAR(255) NOT NULL,
`date` VARCHAR(32) NOT NULL,
FULLTEXT(post),
PRIMARY KEY(id)
) ENGINE = MyISAM;

CREATE TABLE if not exists gastenboek_blacklist (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`listedIP` VARCHAR(15) NOT NULL,
`date` VARCHAR(32) NOT NULL,
PRIMARY KEY(id),
INDEX(listedIP)
) ENGINE = MyISAM;

-- voeg een record toe in het gastenboek
insert into `gastenboek` (id, user, mail, post, url, date) values (default, 'Jan Reilink', 'jan@reilink.nl', 'Dit is het eerste bericht in dit oude gastenboek.<br>I hope you\'ll like it!', 'https://www.reilink.nl', NOW());

-- voeg een record toe in de blacklist
insert into `gastenboek_blacklist` (id, listedIP, date) values (default, '203.0.113.25', NOW());

Log je nu in op je MySQL-database via phpMyAdmin, dan ziet dat er als volgt uit:

MyISAM tabellen in MySQL, in phpMyAdmin weergegeven

Onder de kolom Type zie je MyISAM staan. En dat is precies wat je niet wilt hebben. Dit moet worden omgezet: van MyISAM naar InnoDB.

MyISAM tabellen converteren naar InnoDB

Je converteert het MyISAM opslagformaat eenvoudig met een ALTER TABLE opdracht, zoals ik heb uitgelegd in mijn Engelstalige Saotn.org artikel ‘convert MySQL MyISAM tabels to InnoDB‘:

ALTER TABLE `gastenboek` ENGINE=InnoDB;
ALTER TABLE `gastenboek_blacklist` ENGINE=InnoDB;
Alter table naar InnoDB in phpMyAdmin

Hier zeg je eigenlijk tegen MariaDB / MySQL: pas mijn tabel gastenboek aan en zet de ENGINE op InnoDB. Doe dit ook voor de tabel gastenboek_blacklist.

In phpMyAdmin ziet het er dan als volgt uit (let op de kolom Type):

InnoDB tabellen in phpMyAdmin weergegeven

Nu is dit met twee, drie of tien tabellen nog wel handmatig te doen. Maar bij enkele tien- of honderdtallen tabellen kun je dit beter automatiseren. Zie het hierboven gelinkte artikel voor een SQL prepared statement (query) om de ALTER TABLE regels voor alle tabellen te printen. Hoef je het alleen nog maar te kopiëren en plakken.

Succes! Laat in een reactie weten of je dit is gelukt, of tegen welke problemen je precies aanliep.

PHP & MySQL boekentips

Wil je beginnen met PHP en MySQL? Of juist er méér mee leren doen? Maak een goede start met één van deze (ebook) boeken!

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *