Можно ли хранить SQL запрос в переменной сессии PHP?
Это совершенно бессмысленно. 
Вообще, есть простое правило: не следует усложнять код на пустом месте.
Любой код должен всегда решать кокретную, существующую проблему. "Я тут подумал" - это не проблема. Поэтому решать её не надо.
Хранить в сессии SQL запрос вполне безопасно. 
Обычно так не делают, потому что генерация запроса занимает ничтожно малое время в сравнении с выборкой данных. Для оптимизации, лучше оптимизировать запросы, и при возможности использовать кеширование результатов запроса или контента сформированного на основе этих результатов. Кеш запросов конфигурируется в настройках сервера баз данных. Кеш на стороне бекенда, может быть как кеш результатов запросов к бд, так и кеш контента который будет на основе этих результатов сгенерирован, для этого отлично подойдет Redis и Varnish. 
Кеш непосредственно запроса, имеет смысл использовать, если для формирования конечного запроса, используются дополнительные запросы и эти запросы не поддаются кешированию на стороне бд.