Moin, also was mir direkt auffällt du bist recht grosszügig mit den Feldern innerhalb der DB.
Ob das jetzt einen wirklich relevanten Unterschied darstellt sei mal dahingestellt aber Kleinvieh macht auch Mist.

Ich beziehe mich mal auf die Bilder vom ersten Post.

form_website und to_website haben ein INT10 das entspricht 10x0 Einträgen selbst mit einem INT6 könntest du
vermutlich genug Websites IDs vergeben um ein Grossteil des Webs zu definieren. Visitor Country und Visitor_Country_Short sind nur reine bequemlichkeit. Eins von beiden kann Weg und durch eine Funktion zugeordnet werden. Was der Visitor Tag macht ist auf Anhieb nicht erkennbar da immer auf NULL.
Die Visitor Adress ist ebenfalls zu lang mit varchar Hundert, selbst eine IPv6 würde sich mit 39 Zeichen begnügen. Der Traffic Type mit 0/1 anstatt Enum sollte ebenfalls performanter sein.

Das sind die Dinge die mir direkt ins Auge fallen das schon in der DB an sich grosszügig Ressourcen verteilt werden. Die weiteren Stichworte wären dann wirklich Caching und Query Optimierung also mal Tracken welche Querys fressen am meißten und da gezielt ansetzen. Kompression durch Hashen der DB Felder macht da ebenfalls durchaus Sinn.