Do you understand what the text
data type *MEANS* in MySQL???
You should *NEVER* make ANY field be a TEXT field unless you MUST.
All TEXT fields are stored as just a pointer in the record with the actual data of the TEXT field stored separately. So all queries that need to retrieve values from TEXT fields must make *TWO* disk reads: One to read the main record, another to go read the part of the disk where the TEXT data resides. And when you have *EIGHT* TEXT fields, as you do in your comments table, that means AS MANY AS NINE DISK READS. (Probably not that many, as it is likely that multiple TEXT fields for the same record will be stored adjacent, but there is no guarantee of that!! It *can* be nine disk reads!)
And it's not such an egregious mistake, but using BIGINT is also almost always a waste of disk space and memory (and, to a minor degree, performance). Consider: an ordinary INT field can hold a maximum positive number of over TWO BILLION. Do you *REALLY* think you are going to have over 2 billion items? or itemcomments?
You truly should rethink your table designs. Only use fields as big as you need to, not monstrous fields that do nothing but waste disk space, memory, and performance.