Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Медленный отбор карточек при аналитических параметрах : Супермаг Плюс (Супермаг 2000)

23.11.2024 7:13


01.03.2007 17:34
Собственно нам пожаловались, что если на закладке Аналитика в фильтре карточек задать поставщика и выполнить по всем товарам, то очень долго приходится ждать результата.

Оговорюсь сразу, что та же база стоит и у нас и мы можем протестировать все это у себя. По крайней мере у нас эта база (~50 Гб) в приличном состоянии, у клиента версия СМ 1.024.5 SP5.
У нас 1.24.6 sp3.

TOAD виснет над той же выборкой минут 30, а Супермаг не справился и за полтора часа. Стало оч. интересно, что же там СМ такое делает?
Вывели запрос:
SELECT tmain.article, tmain.name, tmain.accepted, tmain.datatype,
tmain.datasubtype, tmain.scaleload, tmain.cashload, tmain.receiptok,
tmain.cardcomment
FROM supermag.smcard tmain
WHERE EXISTS (SELECT /*+ INDEX (s smspec_art) */ *
FROM supermag.smdocuments d, supermag.smspec s
WHERE s.doctype = d.doctype
AND s.docid = d.id
AND s.doctype = 'WI'
AND d.opcode = 0
AND s.article = tmain.article
AND d.docstate IN (2, 3)
AND d.clientindex = 284)
ORDER BY tmain.article

Вроде небольшой запрос, но вот оператор EXISTS настораживает...

Просто немного переписали запрос...

SELECT tmain.article, tmain.name, tmain.accepted, tmain.datatype,
tmain.datasubtype, tmain.scaleload, tmain.cashload, tmain.receiptok,
tmain.cardcomment
FROM supermag.smcard tmain
WHERE tmain.article in (SELECT /*+ INDEX (s smspec_art) */ s.article
FROM supermag.smdocuments d, supermag.smspec s
WHERE s.doctype = d.doctype
AND s.docid = d.id
AND s.doctype = 'WI'
AND d.opcode = 0
AND s.article = tmain.article
AND d.docstate IN (2, 3)
AND d.clientindex = 284)
ORDER BY tmain.article

Не успели моргнуть и глазом, а результат выполнения уже на экране.
Причем тот же.
01.03.2007 18:24
Не посмотрел сразу, запросы разные. Логику поменял. А за счет сужения выборки увеличивается скорость. Только не у всех одинаково твоя поправка сработает. Если хвост с подсказкой выдаст большое количество записей, то твой запрос ляжет намертво, а оригинальный нет. Это при первом присмотре.
Давай лучше разберемся, почему у тебя первый запрос тормозит? У меня база гигов на 7, на буке, запрос выполняется секунд за 5. План давай.
02.03.2007 05:45
Проверил ради интереса у себя. База 15 гиг, карточек 30000. Супермаг 1.024.5.5. Запрос выполняется пусть не как у Олегона за 5 сек, но меньше минуты точно. (20-50 секунд, в зависимости от поставщика).
02.03.2007 07:07
Цитата:
olegon Если хвост с подсказкой выдаст большое количество записей, то твой запрос ляжет намертво
Ничего с ним не случиться ибо хвост при всем желании не вернет больше записей чем в самой SMCARD
02.03.2007 08:33
Цитата:
reddevil
Цитата:
olegon Если хвост с подсказкой выдаст большое количество записей, то твой запрос ляжет намертво
Ничего с ним не случиться ибо хвост при всем желании не вернет больше записей чем в самой SMCARD
Этого мало? Реальный пример - 600000 карточек. Думаю, протормозит конкретно так.
02.03.2007 12:10
Для сравнения:
Оригинальный запрос отработал за 264 секунды, отобрал 136 строк, карточек 100 000. База переживает не самые лучшие времена, размер без ТЕМПов 101 Гб
Часовой пояс GMT +3, время: 07:13.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.