Optimize table by removing large field
PARTITION is unlikely to help.

CHAR(32) -- is it utf8?  If so, then it is taking 96 bytes; what a waste.  And it is hex, correct?  Consider converting to binary and using BINARY(16) to save space.  Note that (in InnoDB) the PRIMARY KEY is included in each secondary key.  So, 8 indexes times (96-16) bytes = 640 bytes per row saved.

In MySQL there are HEX() and UNHEX().  Your programming language probabls has something.

Yes, do consider "vertical partitioning" to move the body to another table (body + id; primary key is id):


Searching in the main table will be faster because of not tripping over the bodies.
The JOIN to get the body won't be bad, especially since you won't be fetching many bodies at once.
Consider making the body a MEDIUMBLOB and compressing (in the client) the text.  This will give you a big savings in disk space.  (And it is the only significant saving.)  Text typically compresses 3:1.


Make a decision soon.  Any change is likely to need both the old copy of the bodies and the new during the conversion.  The 50% is scary.

If you have 8 indexes, are any of them "composite"?  Are any just on a flag?  Please provide SHOW CREATE TABLE.