To záleží na workloadu. Pro časté a náročné selecty na málo se měnících tabulkách je cache výhodná. Někdy přímo mariadb query cache, někdy maxscale cache plugin, někdy proxysql query cache. Pokud nebudeme mluvit o úplně oddělených aplikačních non-sql cache jako např. redis nebo memcached.
MaxScale ani ProxySQL nemají problém s mutexy, ale proxysql neinvaliduje cache jinak než pomocí TTL (nebo ručně celou cache najednou), Maxscale invaliduje i po DML příkazech (update, insert, delete), ale nezachytí zápisy např. z triggerů nebo stored procedures.
on DEMAND query cache je často používaný kompromis.
mysql 8.0 query cache odstranilo, naproti tomu mariadb ji dále podporuje a vyvíjí. Pokud vím, např. nahradili globální mutex vícero lokálními rozpartišnováním cache, umožňující tak částečný paralelní workload.
30% je celkem vysoký poměr zápisu, jestli to jsou ty zápisy i selecty rovnoměrně rozloženy v čase, tak cachovat selecty nad dotčenými tabulkami má sotva smysl.