It's not all about running OPTIMIZE. Maybe you should start splitting your tables into smaller tables, normalizing the data, decreasing the queries, analyzing the efficiency of the queries (with EXPLAIN), etc.
The first thing I can suggest is to review the queries that are rotated and see if you need all the data returned. Another possible action is to begin purging old data from your table, leaving it lighter.
Then the interesting thing would be you study how normalization of a database works (especially leaving it in normal forms 1FN, 2FN and 3FN, although there is also 4FN, 5FN and Boyce-Codd) and see what it is possible to leave in your database.
As for MySQL, you can also see if it is worth optimizing the tables (for example, for InnoDB, but depends a lot on the characteristics of your queries) or tidy up the database settings. Another thing: is the machine where the database is not overloaded with other services?
Check out these points and see where to start.