У меня была похожая ситуация, когда я пытался выяснить, нужно ли просто иметь TEXT
или BLOB
в таблице для принудительной установки дисковой временной таблицы, когда MySQL должен создать временную таблицу или что этотакже зависит от того, находится ли этот столбец в запросе (SELECT
или WHERE
предложение).
Это был запрос (posts.body
имеет тип TEXT
)
SELECT * FROM posts p LEFT JOIN user u ON p.user_id = u.id LEFT JOIN setting s ON u.id = s.user_id WHERE (p.title LIKE '%search%' AND (p.status = 'PUBLISH' AND p.date <= 1368441957)) GROUP BY u.id LIMIT 5
Я видел, что при выполнении этого увеличивается переменная Created_tmp_disk_tables
.Поэтому я изменил запрос на
SELECT p.id FROM posts p LEFT JOIN user u ON p.user_id = u.id LEFT JOIN setting s ON u.id = s.user_id WHERE (p.title LIKE '%search%' AND (p.status = 'PUBLISH' AND p.date <= 1368441957)) GROUP BY u.id LIMIT 5
И, что интересно, счетчик не увеличился.Однако в документации MySQL упоминается следующее, что отличается от моего вывода
Некоторые условия не позволяют использовать временную таблицу в памяти, и в этом случае сервер использует вместо нее таблицу на диске:
Наличие столбца BLOB или TEXT в таблице
...