Что может страшного случиться, если вызвать SELECT? С лимитом, разумеется. Он же только читает данные, ничего не случится?

Через SELECT можно:

  • вызвать хранимую процедуру/функцию, в которой может быть что угодно;
  • обратиться к вычисляемому полю, которое в свою очередь может дергать функцию;
  • выбрать запись для обновления и не отпустить лок;
  • просто захватить лок (например, advisory-lock);
  • вызвать агрегирующую функцию, которая затрагивает все данные, но возвращает один результат (поэтому лимит не поможет снизить нагрузку, но она может быть не критичной);
  • вызвать перезапись данных: при записи большого числа блоков часть из них может быть вытеснена из кэша с необновленным битом статуса транзакции, любое последующее обращение к таким блокам (например, select) вызовет обновление этого бита (чтобы он соответствовал действительности) и, как следствие, вызовет перезапись всего блока;
  • тупо “вымыть” данные из кэша;
  • стриггерить триггеры (например, аудит).

Вдохновлено кусочком этого доклада, во многом помог Игорян, за что ему большое спасибо!