Причина, по которой требуется операция query при чтении данных из GSI, заключается в том, что в отличие от самой таблицы GSI может содержать несколько элементов для одного и того же ключа. Итак, в то время как для самой таблицы вы гарантированно и вынуждены иметь только один элемент на раздел + ключ сортировки, GSI может закончить тем, что несколько элементов будут сопоставлены с одним и тем же разделом + ключ сортировки в GSI.
Я не буду комментировать производительность запроса GSI по сравнению с элементом get в основной таблице, кроме как сказать, что вы должны запустить собственный тест, если вас беспокоит производительность, хотя в большинстве случаев разница должно быть незначительным.