Запросы к таблицам с геометрией, в которых не запрашивается сама геометрия, выполняются дольше, чем к таблицам без геометрии?

У меня есть таблица postgis в приложении geodjango, которая содержит около 45 000 строк с геометрией типа мультиполигон. Я хотел бы знать, замедляет ли запрос к этой таблице наличие геометрии, когда геометрия не участвует в запросе, или, другими словами, если я свяжу поле геометрии отношением один-к-одному, это увеличит производительность?

Это зависит.

Если геометрия достаточно велика, чтобы храниться вне строки в таблице TOAST, главная таблица будет почти такой же маленькой, как если бы в ней не было колонки геометрии, и будет трудно измерить разницу в скорости.

Если геометрия меньше, и геометрия хранится в основной таблице, запрос к таблице будет несколько медленнее, потому что вся строка таблицы считывается с диска, и в итоге у вас будет больше операций ввода-вывода, чем если бы у вас не было столбца.

Однако, если вы храните геометрию в другой таблице с отношением один-к-одному, извлечение геометрии повлечет за собой накладные расходы на дополнительное присоединение, что сделает эту операцию более медленной.

Я рекомендую вам не усложнять ситуацию и хранить геометрию в таблице. Очень вероятно, что прирост производительности, который вы можете ожидать от выполнения чего-то более сложного, будет невелик, а общая производительность вашего приложения может даже пострадать. По-моему, это звучит как преждевременная микрооптимизация. Если вы хотите пойти этим путем, проведите реалистичный тест производительности с реалистичными тестовыми данными, чтобы убедиться, что это стоит затраченных усилий.

Вернуться на верх