powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом
49 сообщений из 49, показаны все 2 страниц
Помогите с запросом
    #39981658
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть парсер, он парсит файлы в БД. Файлы бывают разные- со скана, выгрузка с БД, самостоятельно ведомая БД. Данные в них одинаковые, но называются по разному…Поэтому пришлось использовать костыль в виде таблицы Замены (Рокеровки -ну я так это назвал).
Это краткое вступление-почему так коряво то все.
Теперь собственно сама проблема:
Таблица Рокеровка
IDOLD_VALNEW_VALVIDCATEGORY1TV-232СПЕКТ 5ТВТехника2СПЕКТ 5СПЕКТР 5ТВТехника3Бумага СнегСнегурочка А4БумагаОфисные товары

Основная таблица(ALFA):
ID ID_NEW_NAME DAT POSIT SUMMA1 3 18.07.20 5 25002 3 19.07.20 3 15003 3 20.07.20 2 1000

Что собственно надо, нужен отчет который выводит итоговую статистику по продажам, те позиции которые не продавались-должны показывать нули (вот с этим то и проблемы, как это сделать?).

Тот запрос который сейчас есть:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
  sum( alfa.posit ) sum_of_posit,
  sum( alfa.summa ) sum_of_summa,
  alfa.dat, 
  rokerovka.category,
  rokerovka.vid 
from rokerovka
  inner join alfa on (rokerovka.id = alfa.id_new_name) 
where (alfa.dat between :d1 and :d2)
group by alfa.dat,rokerovka.category
order by alfa.dat



Он не выводит те "Виды"-по которым нулевые продажи. Ситуация еще немного осложняется тем что БД-FireBird (и она не может селект из селекта,ну и руки у меня кривые).
Модератор: Пользуйтесь тегами!
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981665
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужны нули, то может LEFT JOIN вместо INNER?

P.S: Firebird может селект из селекта...
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981668
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, пробовал, результат тот же, только выполняется минуту вместо нескольких секунд. толи не в том порядке таблицы объединяю... пробовал и Right join. Тоже самое.
п.с. утверждать не буду. ФайрБирд 2.5 - не получилось под IBExpert выполнить такой запрос(Селект в селекте).
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981682
Фотография brick08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ,
Код: sql
1.
or alfa.dat is null
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981683
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот например запрос тех позиций которые по нулям. Но как его присоединить к первому запросу...Да еще и с суммами по нулям, и сгрупировать по "ВИДу"

Код: plsql
1.
2.
3.
4.
5.
select VID from rokerovka2 where rokerovka2.id not in(
select alfa2.id_new_name
from alfa2
where (alfa2.dat between :d1 and :d2)
) group by VID
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981689
Фотография brick08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
  sum( alfa.posit ) sum_of_posit,
  sum( alfa.summa ) sum_of_summa,
  alfa.dat, 
  rokerovka.category,
  rokerovka.vid 
from rokerovka
  left join alfa on (rokerovka.id = alfa.id_new_name) 
where (alfa.dat between :d1 and :d2)
  or alfa.dat is null
group by alfa.dat,rokerovka.category
order by alfa.dat
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981691
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ,

Ну как-то так:
Код: sql
1.
2.
3.
4.
5.
select a.dat, r.category, r.vid, sum( a.posit ) sum_posit, sum( a.summa ) sum_summa from rokerovka r
  left join alfa a on a.id_new_name = r.id
  where a.dat between :d1 and :d2 or a.dat is null
  group by a.dat,  r.category, r.vid
  order by a.dat


Код: plaintext
1.
2.
3.
DAT	CATEGORY	VID	SUM_POSIT	SUM_SUMMA
		Техника		ТВ		
19.07.2020	Офисные товары	Бумага	3	1500
20.07.2020	Офисные товары	Бумага	2	1000

Если нужны именно '0' вместо 'null' то можно добавить coalesce().
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981700
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
brick08 , alekcvp - так то да, но на продакшене получается ересь. Типо ТВ-ноль, потом дальше по списку видишь за этот период Тв-10 штук, например. Щас, дайте время сам переварю что пошло не так-отпишу. на тестовой базе(как в первом посте) все ок, там нет такого наполнения просто.
В любом случае спасибо, что указали как надо писать сей запрос.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981724
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
Щас, дайте время сам переварю что пошло не так

Чтобы видеть "0" по датам необходимо откуда-то взять эту дату, чтобы потом к ней присоединять продажи...

Т.е. нужна будет ХП типа:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or alter procedure DATE_GEN (
    DFROM date not null,
    DTO date not null)
returns (
    CDATE date)
as
begin
  cdate = dfrom;
  while (cdate <= dto) do
  begin
    suspend;
    cdate = cdate + 1;
  end
end
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981729
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итоговый запрос:
Код: plsql
1.
2.
3.
4.
5.
select g.cdate, r.category, r.vid, sum( a.posit ) sum_posit, sum( a.summa ) sum_summa
  from rokerovka r right join date_gen(:d1, :d2) g on 1=1
  left join alfa a on a.id_new_name = r.id and a.dat = g.cdate
  group by g.cdate, r.category, r.vid
  order by g.cdate


CDATECATEGORYVIDSUM_POSITSUM_SUMMA19.07.2020Офисные товарыБумага3150019.07.2020ТехникаТВ 20.07.2020Офисные товарыБумага2100020.07.2020ТехникаТВ
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981731
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свои пять копеек внесу. Зачем отображать нулевые продажи? Представьте у Вас список товаров несколько тысяч. Многих в наличии на складе нет давно. Зачем тащить эти нули? Если уж есть какие-то продажи конкретного товара за период и нужно отобразить некие нули, то Ваш запрос "простоват" для этого. И возможно лучше это сделать на клиенте. Реально Вы насилуете сервер, пытаясь получить несуществующие данные.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981734
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

Мне кажется этот вопрос надо задавать преподавателю
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981752
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
where a.dat between :d1 and :d2 or a.dat is null

Не надо так писать.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981763
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery
Код: sql
1.
where a.dat between :d1 and :d2 or a.dat is null

Не надо так писать.

А как надо?
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981785
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так, наверное
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select rokerovka2.category,rokerovka2.vid,alfa2.posit from rokerovka2
inner join alfa2 on (rokerovka2.id = alfa2.id_new_name)
where (alfa2.dat between :d1 and :d2)
group by rokerovka2.category,rokerovka2.vid,alfa2.posit
UNION
select r2.CATEGORY,r2.VID,alfa2.posit from rokerovka2 r2
left join alfa2 on (r2.id = alfa2.id_new_name)
where r2.id not in(select a2.id_new_name
from alfa2 a2
where (a2.dat between :d1 and :d2)
) group by r2.CATEGORY,r2.VID,alfa2.posit



Если кто изящнее знает-напишите. А так вопрос решен. alfa2-это дубль alfa, тоже самое с рокеровкой, чтобы прод не мучить.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981788
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
KreatorXXI,

Мне кажется этот вопрос надо задавать преподавателю


Надо тогда посмотреть задание. В голове у неофита застрянут неправильные рекомендации. Потом их оттуда не вышибешь ничем.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981792
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
А как надо?
В условие соединения выносить, а не в where костыли ставить.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981795
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У неофита в голове уже помойка, Вы лучше мне растолкуйте куда чего переносить.
А то на проде уже 5 минут запрос крутиться, да не выкрутиться :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981797
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
Вот так, наверное

И в чём смысл возвращаемого набора данных?

CATEGORY VIDPOSITОфисные товары Бумага2Офисные товары Бумага3ТехникаТВ
AlekZ
Вы лучше мне растолкуйте куда чего переносить.

Вот так не работает? (2 сообщения) 22170307
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981801
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
Вот так, наверное
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select rokerovka2.category,rokerovka2.vid,alfa2.posit from rokerovka2
inner join alfa2 on (rokerovka2.id = alfa2.id_new_name)
where (alfa2.dat between :d1 and :d2)
group by rokerovka2.category,rokerovka2.vid,alfa2.posit
UNION
select r2.CATEGORY,r2.VID,alfa2.posit from rokerovka2 r2
left join alfa2 on (r2.id = alfa2.id_new_name)
where r2.id not in(select a2.id_new_name
from alfa2 a2
where (a2.dat between :d1 and :d2)
) group by r2.CATEGORY,r2.VID,alfa2.posit



Если кто изящнее знает-напишите. А так вопрос решен. alfa2-это дубль alfa, тоже самое с рокеровкой, чтобы прод не мучить.


Второй запрос (после Union) вообще дурно попахивает. Вы посмотрите "Анализ плана" и "Анализ производительности".
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981809
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,
хранимку пока не создавал. В ФайрБирде с ними не работал, надо прогуглить куда ее тут сувать.
Меня напрягло то что на живой базе с Вашим запросом лезут и нули по некоторым позициям, по которым есть продажи. И не совсем своими мозгами понимаю как срабатывает условие "нулевой даты" (нет записи-значит DATE нулевая?).

А смысл-вернуть те строки по которым ноль продаж. У Вас там опечатка получилась в таблице-там в POSIT null у техники.


KreatorXXI,
10 минут выполняется...чуть модифицировал запустил еще раз. Жду :)

PLAN (ALFA NATURAL)
PLAN (ALFA NATURAL)
PLAN SORT (JOIN (ALFA NATURAL, ROKEROVKA INDEX (PK_ROKEROVKA)))
PLAN SORT (JOIN (R2 NATURAL, ALFA NATURAL))

-по мне это ругань чистой воды.
Non Indexed Reads ALFA - 977 304 192
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981819
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
alekcvp,
Меня напрягло то что на живой базе с Вашим запросом лезут и нули по некоторым позициям, по которым есть продажи.

Предыдущий запрос был не правильный, я переделал :)

P.S: Тестовые базы уже не в моде? Эксперименты на продакшене? О_о
AlekZ
хранимку пока не создавал. В ФайрБирде с ними не работал, надо прогуглить куда ее тут сувать.

Рекомендую IBExpert 1883929
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981823
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ

PLAN (ALFA NATURAL)
PLAN (ALFA NATURAL)
PLAN SORT (JOIN (ALFA NATURAL, ROKEROVKA INDEX (PK_ROKEROVKA)))
PLAN SORT (JOIN (R2 NATURAL, ALFA NATURAL))

-по мне это ругань чистой воды.
Non Indexed Reads ALFA - 977 304 192


Может, действительно, книжки какие для начала почитать? У Вас план по "натуралу". Это значит, что не используются никакие индексы. Плюс ещё идёт перемножение таблиц. 10 минут - это ещё хорошо при таком раскладе. Индексы по датам хоть есть?

Я бы оставил в конце концов один из первых Ваших запросов. Таблица alfа должна отрабатываться по индексу с датой, а вторая таблица (боюсь её название даже писать) должна быть связана по inner join (inner можно не писать). Нули добивайте на клиенте.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981825
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, я как раз в ИБЭксперте и сижу. Для ОгоньПтицы по-моему других админок то и нету :)
Ну ладно, я запустил Ваш "Итоговый запрос:" -не знаю , то или не то. Но пока 5 минут и тухляк (все еще выполняется) :)
Прод такой-его не жалко. Его использую я и еще 1 человек, для которого весь этот огород и делался.
Был бы прод который нельзя трогать-была бы нормальная инфраструктура/норм зарплата/ и норм специалист который такие вопросы по форумам не задает (тут я ушел плакать в дальний угол).
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981828
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI, может и книги почитать. А зачем индексация по датам? Какие плюсы?
Ткните на дельную книгу или статью. Я не ДБА (когда-то хотел им стать), но у нас не нужны ученики. так прочитаю-но через 2 года забуду.
и когда поле дата было ключевым? Или индекс и ключ не одно и тоже?
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981829
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZА зачем индексация по датам? Какие плюсы?
зачем нужно оглавление в книге? чтобы быстро найти нужный раздел. А без оглавления придется каждый раз всю книгу читать от начала до конца.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981831
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZФайрБирде
не удержался :-)
"файрбирд" - это огненная борода (или рыжая борода), firebeard.
А Firebird - это огненная птица, файербёрд. Бёрд, не "бирд".
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981835
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

нужны ли в оглавлении ссылки на каждую точку, а на запятую?
Четкого ТЗ нет, что завтра в этой БД искать придется и какой отчет родить-никто не знает. Делать все поля индексами?

alekcvp , - 22 минуты выполнялся итоговый запрос... и выдал только "нулевые" позиции.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981841
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZДелать все поля индексами?
только те, по которым чаще всего идет поиск.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981842
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
Или индекс и ключ не одно и тоже?

Ну а ключ по дате есть? Что такое ключ?
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZЧеткого ТЗ нет, что завтра в этой БД искать придется и какой отчет родить-никто не знает.

Я не буду оригинальничать и предложу оторвать руки проектировщику БД. Её надо просто
выкинуть и сделать заново со следующими таблицами:
1. Справочник категорий.
2. Справочник товаров (с каноническими названиями).
3. Список синонимов (с толпой левых названий и указанием к какому каноническому товару они
относятся).
4. Таблица продаж (движений).

Всё. С этой структурой уже можно работать, искать что угодно и плодить любые отчёты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981848
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI, это я у вас спросил. Ключ для меня ключевое поле, насколько знаю (потеет как на экзамене) бывает примари кей (и еще какой-то мать его кей). Я их по старинке зову ИД. А поскольку дата не может быть конкретным ИД, то я ее ключем не считаю. Можно её использовать как составной ключ, но у нас уже есть ИД, который точно указывает на конкретную запись. Поэтому использовать Дату как ключ-избыточно.
Я прошел собеседование? :)

Dimitry Sibiryakov , ну учитывая что это я, можете мне хоть ногу оторвать.
Легче работать мне от этого не станет, ведь я и прогу напиши и базу сочини и макет нарисуй. Давайте я не буду тут жаловаться на жизнь и как я до этого докатился. Но вот. Переделать БД можно, до сегодняшнего дня она вполне удовлетворяла всех. Переделывать, чтобы потом всплыла новая хотелка-чтобы опять все стены передвигать, учитывая зарплату 100 рублей в час-не самая разумная идея. Ладно бы я мог сказать-извините делаю БД, подождите с другими тасками...нет, иди паши за 5рых, за 100 рублей.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981850
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
А Firebird - это огненная птица, файербёрд. Бёрд, не "бирд".

А что, отличный логотип для Legacy-версий 😂
AlekZ
alekcvp , - 22 минуты выполнялся итоговый запрос... и выдал только "нулевые" позиции.

Странно, на ваших тестовых данных всё работает.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981853
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, может проскролил и не заметил. Убрал дату из запроса-она все равно не нужна(пока не нужна). Еще 20 минут и узнаем :)
Скорее всего откажемся от этой хотелки. Либо отдельный запрос нулевых продаж будет.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981867
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
KreatorXXI, это я у вас спросил. Ключ для меня ключевое поле, насколько знаю (потеет как на экзамене) бывает примари кей (и еще какой-то мать его кей). Я их по старинке зову ИД. А поскольку дата не может быть конкретным ИД, то я ее ключем не считаю. Можно её использовать как составной ключ, но у нас уже есть ИД, который точно указывает на конкретную запись. Поэтому использовать Дату как ключ-избыточно.
Я прошел собеседование? :)

Dimitry Sibiryakov , ну учитывая что это я, можете мне хоть ногу оторвать.
Легче работать мне от этого не станет, ведь я и прогу напиши и базу сочини и макет нарисуй. Давайте я не буду тут жаловаться на жизнь и как я до этого докатился. Но вот. Переделать БД можно, до сегодняшнего дня она вполне удовлетворяла всех. Переделывать, чтобы потом всплыла новая хотелка-чтобы опять все стены передвигать, учитывая зарплату 100 рублей в час-не самая разумная идея. Ладно бы я мог сказать-извините делаю БД, подождите с другими тасками...нет, иди паши за 5рых, за 100 рублей.


Послушайте, это же клиника. Самый лучший вариант - пойти туда, где всплывают хотелки и сказать, что за 100 рублей я даже книгу по теории БД не открою. И скуль мне не упёрся, и файрбирд. За 100 рублей-то!
ВЫ контору свою озвучьте! Я что-то не верю в существовании такой богадельни, как Вы тут описываете.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981873
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
"файрбирд" - это огненная борода (или рыжая борода), firebeard.
Barbarossa :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981882
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI, я не про лень свою, я про то что ДБА мне тут не светит и спокойно заниматься архитектурой и вылизыванием. Роста в этом направлении не будет. Зачем тогда мучить себя-ведь все равно не получишь конфетку (как продукт, так и премию)?
Более того, давайте приоткрою страшную тайну:
-в одном из случаев Категория товара берется из файла (выгрузки из БД, сформированной в другой программе тетенькой и присланной на емайл). При этом достоверность данных никто не гарантирует.
-в других случаях Категория определяется Таблицей Рокеровка
Как Вам такое?

Смысла нет-если система изначальна хромая. Есть уже БД из которой все могли нормально выгрузить, но нет (проблема управления и прочих элементов власти). В итоге часть выгрузки из БД распечаткой приходит, часть на Емайл, другую часть лучше мы руками будем вести Эксель файл. Вы тут хотите что-то сделать нормальное? Серьезно? без рычагов управления-анрил...А я глядя на ЗП-занимаю пост чуть выше уборщицы, так что порядка не будет :) ИТ- тут не главное...

А про ЗП, Вы приезжайте в Замкадье тут много вакансий на минималочку 12 тыр, на 15 тыр, на 20 тыр (как у меня). Ни в чем себе не отказывайте. Контору говорить не буду-тут не ошибетесь, суйтесь в любую.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981885
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZКак Вам такое?

Совершенно пофиг, обрабатывается точно так же как и всё остальное: через таблицу синонимов
в структуре, описанной мною выше.

Запрос сводится к тривиальной паре левых джоинов, но с условием по дате оптимизируется
дерьмово, да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981891
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
у меня также и обрабатывается, если мы про парсер говорим. Только в одном случае таблица игнорируется-и данные берутся из исходника. В другом случае за данными мы лезем в таблицу (за синонимом, за рокеровкой).
В любом случае это костыли, которыми в конечном итоге хвалиться не придется.

Левые джойны почему-то вообще туго выполняются. Пишешь инер-мигом, пишешь лефт-все минута пошла...

Структура если и будет ковыряться-то позже, например вылезет косяк с основными запросами-станут выполняться не за секунду, а за минуту. но пока данные за 3 или уже 4 года (лень смотреть) и летает. Но тут мало данных. На SQL давно делал базу для АТСки, вот там данных вагон-приходилось разбивать по годам.


alekcvp , да, то что надо-проскролил видимо. Но выполнялся 1 час 6 минут :)) Забью я наверное на эту хотелку. Я все равно знаю что еще хотелок навылезает у пользователей, там и посмотрим как лучше переделать.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981900
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
Но выполнялся 1 час 6 минут :)) Забью я наверное на эту хотелку.

Сколько записей в этих двух таблицах? И за какой интервал делалась выборка?
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981905
AlekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, интервал дат 01.04.20-30.06.20 , по этому интервалу 605 записей в Альфе, всего строк в Альфе: 42 664 (в рокеровке: 1536). Если я правильно посмотрел:

Код: plsql
1.
select COUNT(*) from rokerovka



reads: 389 989 415
Тут реально не Ваш косяк-оптимизации нет никакой.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981906
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YouTube Video
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981913
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
интервал дат 01.04.20-30.06.20 ... в рокеровке: 1536

То есть обработка по ~140 тысячам записей, на каждую из них надо просмотреть ~42к записей в alfa... ну тогда не удивительно :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981921
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZ
reads: 389 989 415
Тут реально не Ваш косяк-оптимизации нет никакой.


Сделал отдельные индексы по alfa.id_new_name, alfa.dat, rokerovka.vid, rokerovka.category.
Результат для 1500 записей в рокеровке и 42000 записей в альфа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
План
PLAN SORT (JOIN (JOIN (G NATURAL, R NATURAL), A INDEX (A_IDX2)))

------ Информация о производительности ------
Время подготовки запроса = 0ms
Время выполнения запроса = 5s 859ms
Среднее время на получение одной записи = 5 859,00 ms
Current memory = 79 685 984
Max memory = 79 707 376
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Чтений из кэша = 8 633 475
...
Рейтинг: 0 / 0
Помогите с запросом
    #39981931
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekZТолько в одном случае таблица игнорируется-и данные берутся из исходника. В другом случае
за данными мы лезем в таблицу (за синонимом, за рокеровкой).

Это неправильно. Таблица синонимов вообще не должна в запросе участвовать. Только таблица
"настоящих" артикулов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с запросом
    #39982056
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Да уж, парни. А рокеровка у него, вестимо, от слова рокер.
Велика и могуча современная языка.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39982084
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
kdv,

Да уж, парни. А рокеровка у него, вестимо, от слова рокер.
Велика и могуча современная языка.


У меня аж кровь из глаз от этого слова :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #39982121
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F
А рокеровка у него, вестимо, от слова рокер.
Разумеется.
Раньше в Брянске музыкальный фестиваль был "ROKERovka"
А ещё на ютубе есть такой канал.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39982134
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery
А ещё на ютубе есть такой канал.
в ставке гитлера все малахольные... (С)
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]