In elke rdbms zijn er wel mogelijkheden om te optimaliseren op verschillende vlakken. Zowel op niveau van performance, beveiliging als schaalbaarheid. Nu heeft iedere rdbms zijn eigen best practices om tot bepaalde functionaliteit te komen.
Daarom wil ik dit topic starten om zo wat ervaringen te delen, best practices te delen maar zeker ook bepaalde pitfalls bespreken op niveau van MySQL als database. Zelf gebruik ik de InnoDB storage engine omdat ik consistentie hoog in het vaandel draag.
Natuurlijk trapt de TS zelf af met een aantal best practices die ik handig vind:
Security
MySQL kan default een aantal deuren open zetten voor eventuele ongewenste bezoekers; deze probeer ik te omzeilen door vlak na de installatie volgende commando's uit te voeren
Performance
We moeten ervoor proberen te zorgen dat de index gebruikt wordt bij het query'en van de database, we kunnen dit testen door EXPLAIN <SQL> uit te voeren:
Als we een literal value gebruiken in onze conditie, wordt de index misschien niet gebruikt:
Het is natuurlijk aan te raden om de output zover mogelijk te limiteren:
Korter, traffiek daalt wat, alle updates in 1x, flush van index gebeurt ook slechts 1x:
Dit zijn er nog maar enkele en er zijn er vast nog een heel stuk meer. Ik denk zelfs dat enkele van deze voor discussie vatbaar zijn. Dit mag je aanhalen, maar probeer dan wel een nuttige toevoeging toe te brengen aan dit topic door ófwel een betere oplossing te suggereren ófwel nog een aantal andere tips of best practices aan te brengen.
Kom om met jullie best practices, pitfalls, optimalisaties, warnings, ...
Daarom wil ik dit topic starten om zo wat ervaringen te delen, best practices te delen maar zeker ook bepaalde pitfalls bespreken op niveau van MySQL als database. Zelf gebruik ik de InnoDB storage engine omdat ik consistentie hoog in het vaandel draag.
Natuurlijk trapt de TS zelf af met een aantal best practices die ik handig vind:
Security
MySQL kan default een aantal deuren open zetten voor eventuele ongewenste bezoekers; deze probeer ik te omzeilen door vlak na de installatie volgende commando's uit te voeren
SQL:
1
2
3
4
5
| UPDATE user SET password = PASSWORD('rootpass') WHERE user = 'root'; -- password instellen voor de root user UPDATE user SET password = PASSWORD('anon') WHERE user = ''; -- anonymous access securen DELETE FROM user WHERE user = '' AND host = 'localhost'; --delete account with user privileges (windows) SELECT host, user, password FROM user; -- overzichtje FLUSH PRIVILEGES; -- tells server to create new ACL in memory |
edit:
Wel even opletten dat je de PASSWORD() functie enkel gebruikt om de wachtwoorden van je mysql gebruikers te zetten
Wel even opletten dat je de PASSWORD() functie enkel gebruikt om de wachtwoorden van je mysql gebruikers te zetten
Performance
We moeten ervoor proberen te zorgen dat de index gebruikt wordt bij het query'en van de database, we kunnen dit testen door EXPLAIN <SQL> uit te voeren:
SQL:
1
2
| ... WHERE date >= 1994; -- MINDER ... WHERE date >= '1994-01-01'; -- BETER |
Als we een literal value gebruiken in onze conditie, wordt de index misschien niet gebruikt:
SQL:
1
2
| ... WHERE id='18'; -- MINDER ... WHERE id=18; -- BETER |
Het is natuurlijk aan te raden om de output zover mogelijk te limiteren:
SQL:
1
2
| SELECT * FROM table; -- MINDER SELECT firstname, lastname FROM table; -- BETER |
Korter, traffiek daalt wat, alle updates in 1x, flush van index gebeurt ook slechts 1x:
SQL:
1
2
3
4
5
6
7
8
9
| INSERT INTO table(id, name) VALUES (1, 'fox'); INSERT INTO table(id, name) VALUES (2, 'abc'); -- MINDER INSERT INTO table(id, name) VALUES (1, 'fox'),(2, 'abc'); -- BETER -- INNODB: BEGIN; INSERT INTO table (id, name); VALUES (1, 'fox'); VALUES (2, 'abc'); COMMIT; |
Dit zijn er nog maar enkele en er zijn er vast nog een heel stuk meer. Ik denk zelfs dat enkele van deze voor discussie vatbaar zijn. Dit mag je aanhalen, maar probeer dan wel een nuttige toevoeging toe te brengen aan dit topic door ófwel een betere oplossing te suggereren ófwel nog een aantal andere tips of best practices aan te brengen.
Kom om met jullie best practices, pitfalls, optimalisaties, warnings, ...