Not everything is about running OPTIMIZE. Maybe you should start dividing your tables into smaller tables, normalize the data, decrease queries, analyze the efficiency of queries (with EXPLAIN), etc.
The first thing I can suggest is to review the queries that are run and see if you need all the data returned. Another possible action is to start purging old data from your table, making it lighter.
Then it would be interesting to study how the normalization of a database works (especially leave it in the normal forms 1FN, 2FN and 3FN, although there is also 4FN, 5FN and Boyce-Codd) and see what is possible to leave in your database.
As for Mysql, you can also see if it’s worth optimizing the tables (for example, for Innodb, but it depends a lot on the characteristic of your queries) or tidy up the database settings. Another thing: will the machine where the database is not overloaded with other services?
Check these points and see where you can start.
I consider this complementary to my reply. + 1.
– Leonel Sanches da Silva