Тут не исправить уже ничего, Господь, жги! Войти !bnw Сегодня Клубы

Упростил реальный кейс до двух таблиц (объекты и связи между объектами) и функции, которая по id объекта возвращает id привязанного к нему объекта. Суть в использовании именно функции для джойна, а не прямом джойне таблиц.
Заполняем таблицы небольшим количеством данных — в примере всего 500 объектов, половина из которых имеет связь. http://sqlfiddle.com/#!15/4881e1/6 и делаем два запроса с джойном функции:

/* (SLOW) */
-- функция вызывается 500*500 раз, после чего делается джойн вложенным циклом
-- Execution Time: 5242ms
explain analyze select obj.id, ot.id
from toobject obj   
left join toobject ot on ot.id = to_getidref(obj.id);

/* (FAST) */
-- функция вызывается 500 раз в сабквери, после чего делается хеш джойн
-- Execution Time: 19ms
explain analyze select obj.id, ot.id
from toobject obj   
left join toobject ot on ot.id = (select to_getidref(obj.id));
#2W1H9Q / @kogda / 2862 дня назад

спрошу-ка тут еще. #02UUZH - скажи, есть ли разница?

#2W1H9Q/U5Y / @tree_hugger / 2862 дня назад

@tree_hugger Разницы не должно быть, но всегда лучше перепроверить (я не эксперт). Индексированные вьюхи могут дать ускорение, но их приходится обновлять, когда меняются данные в нижележащих таблицах.

#2W1H9Q/KGR / @kogda --> #2W1H9Q/U5Y / 2862 дня назад

@kogda окк, сяб.

#2W1H9Q/0TO / @tree_hugger --> #2W1H9Q/KGR / 2862 дня назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.