Есть две проблемы, которые я вижу здесь изначально. Во-первых, у вас есть запрос с типом данных BLOB-объектов. Это приведет к проблемам со скоростью, когда дело доходит до извлечения данных. Во-вторых, вы используете InnoDB, который оптимизирован для записи. Это означает, что, хотя это, вероятно, лучший выбор в целом, в экстремальных ситуациях чтения он может быть менее производительным, чем MyISAM. Ни одна из этих проблем не обязательно является убийцей сделок, но каждая из них добавляет снижение производительности. Помимо этого, однако, я не уверен, что смогу дать вам хороший ответ относительно того, что вы можете сделать, чтобы лучше оптимизировать без предварительного профилирования. Это то, что я бы порекомендовал вам сделать в первую очередь. Профилируйте свой запрос, чтобы выяснить, что такое план выполнения, а затем определить, почему план выполнения такой медленный.
Вот хороший список "Топ 10" оптимизации MySQL. По крайней мере, пара подает заявку в вашей ситуации напрямую:
http://20bits.com/articles/10-tips-for-optimizing-mysql-queries-that-dont-suck/
Вот еще одна хорошая статья по оптимизации, которая также касается настроек сервера (особенно для InnoDB):
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
Основываясь на предоставленной вами инструкции CREATE TABLE, я подумал о другой вещи, на которую вы должны обратить внимание (опять же, не убийца запросов, но это еще один удар по производительности). Если для вашего поля идентификатора не используется экономическое обоснование, выберите вместо него int. Int позволит 2,1 миллиарда строк, поэтому у вас не должно заканчиваться чисел. Установка этого параметра сэкономит ваше дисковое пространство и улучшит производительность запросов. Вот статья об этом:
http://ronaldbradford.com/blog/bigint-v-int-is-there-a-big-deal-2008-07-18/