Мы хотим убедиться, что в местоположении имеется не более палитр maxCount (с определенным типом инвентаря).
Чтобы гарантировать это, мы суммируем местоположения с палитрами на них или местоположения, к которым будут располагаться палитры. Оба утверждения работают нормально. Тем не менее, мой первоначальный проект был не очень эффективным. Мой советник придумал другой черновик, который намного быстрее, но он не мог объяснить, почему.
Медленное утверждение:
AND maxCount > (
SELECT
trptoloc+atloc
FROM
(
SELECT
COUNT(DISTINCT loc2.locnam) AS atloc
FROM
loc_t loc2,
pal_t pal,
inv_t inv,
art_t art
WHERE
loc.group = loc2.group
AND pal.locnam = loc2.locnam
AND inv.palnam = pal.palnam
AND inv.artid = art.artid
AND AND art.feature = value
),
(
SELECT
COUNT(DISTINCT loc2.locnam) AS trptoloc
FROM
trp_t trp,
loc_t loc2,
inv_t inv,
art_t art
WHERE
trp.locnamezl = loc2.locnam
AND trp.palnam = inv.palnam
AND loc.group = loc2.group
AND inv.artid = art.artid
AND art.feature = value;
)
)
Более быстрое утверждение:
AND maxCount > (
SELECT
SUM(invpal)
FROM
(SELECT
COUNT(distinct inv.palnam) AS invpal
FROM
inv_t inv,
art_t art,
pal_t pal,
loc_T loc2
WHERE
inv.artid = art.artid
AND loc.group = loc2.group
AND pal.locnam = loc2.locnam
AND inv.palnam = pal.palnam
AND art.feature = value;
UNION ALL
SELECT COUNT(distinct inv.palnam) AS invpal
FROM
inv_t inv,
art_t art,
trp_t trp,
loc_T loc2
WHERE
trp.locnamezl = loc2.locnam
AND trp.palnam = inv.palnam
AND loc.group = loc2.group
AND inv.artid = art.artid
AND art.feature = value;
)
)
Любая подсказка или ссылка, которая поможет мне понять разницу в производительности, приветствуется!