Donc, après avoir lu Performances en PDO / PHP / MySQL : transaction versus exécution directe En ce qui concerne les problèmes de performances, j'ai fait quelques recherches sur le verrouillage des tables dans MySQL.
Sur http://dev.mysql.com/doc/refman/5.0/en/table-locking.html
Le verrouillage des tables permet à de nombreuses sessions de lire une table en même temps, mais si une session veut écrire dans une table, elle doit d'abord obtenir le droit exclusif exclusif. Pendant la mise à jour, toutes les autres sessions qui veulent accéder à cette table particulière doivent attendre que le la mise à jour soit terminée.
Cette partie m'a particulièrement frappé parce que la plupart de nos requêtes seront des mises à jour plutôt que des insertions. Je me demandais si l'on créait une table appelée foo sur laquelle toutes les mises à jour/insertions étaient effectuées et ensuite une vue appelée foo_view (une copie de foo, ou peut-être foo et un lien de plusieurs autres tables plus foo) sur laquelle toutes les sélections se produisaient, ce problème de verrouillage se produirait-il encore ?
En d'autres termes, les requêtes SELECT sur foo_view devront-elles toujours attendre la fin d'une mise à jour sur foo ?
Une autre brève question posée par mon collègue. Cela affecte-t-il la mise en cache ? En d'autres termes, si le SELECT est mis en cache, est-ce qu'il ira chercher le cache et renverra les résultats, ou attendra-t-il d'abord la fin du verrouillage ?