powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Exists по двум или более таблицам
25 сообщений из 108, страница 3 из 5
Exists по двум или более таблицам
    #39521874
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да чё вы докопались до Distinct. Пробовать надо. Вряд ли там тысячи дубликатов каждого значения, но вопрошающему виднее. Сортировка резалтсета - не особо затратная операция на умеренном количестве дубликатов.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521880
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devDISTINCT не способен к отбору по индексу
distinct еще с ИБ 6.0 делается исключительно через SORT. Даже если бы он был "по индексу", то не отбором, а проходом, через table order index (как group by, order by...).
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521881
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

Автор написал, что до 100. Да, это мало. И сортировка быстрая.
Вот только "родительских" записей сейчас уже почти три миллиона. А провести три миллиона сортировок - это уже совсем другая история.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521882
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

Если это такой частый запрос, тут самое место для хранимого агрегата.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521883
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryГаджимурадов РустамТам 1-30-100. Не вариант справа налево.Рустам, пусть автор ответит.
Это максимально плохое соотношение. Но пока из его речи следует, что только таблица дефектов не наполнена, остальные, значит, в более-менее рабочем состоянии, и текущее соотношение 1:3
А что автор ответит? Какая-то нестандартная схема работы? Описать бизнес процесс? Мне представляется невозможным просчитывать соотношения количества записей в таблицах. Все таблицы растут, defect явно меньше umass. Пусть планировщик FB сам решает по какому пути пойти. Естественно, ни о каком ручном подборе плана не может идти речи. И фильтров, собственно, нет. И, самое главное, почему Exists? Надо знать - Есть записи или нет. А какие они там - другой вопрос.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521890
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

с точки зрения множеств, тут хоть тресни - либо modul + (umass + defect), либо (modul + umass) + defect
т.е. из трех множеств получить 2, и их уже склеить. Более быстрым вариантом, на мой взгляд, при имеющемся соотношении записей является
modul + (umass + defect).
Не пробовал вариант - from modul where exists (from umass where exists (defect)) ?
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521893
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvrdb_devDISTINCT не способен к отбору по индексу
distinct еще с ИБ 6.0 делается исключительно через SORT. Даже если бы он был "по индексу", то не отбором, а проходом, через table order index (как group by, order by...).Правильно поправил - именно проходом. Странно, что в ФБ до сих пор DISTINCT только по натуралу.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521897
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

во-первых не по натуралы, а внешней сортировкой. Во-вторых distinct применяется ко всем полям в предложении select. А в-третьих с чего ты взял что навигация по индексы будет быстрее при полном фетче?
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521898
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev...Странно, что в ФБ до сих пор DISTINCT только по натуралу.
А как еще, если все поля учитываются? Рассказывай.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521900
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvKreatorXXI,

с точки зрения множеств, тут хоть тресни - либо modul + (umass + defect), либо (modul + umass) + defect
т.е. из трех множеств получить 2, и их уже склеить. Более быстрым вариантом, на мой взгляд, при имеющемся соотношении записей является
modul + (umass + defect).
Не пробовал вариант - from modul where exists (from umass where exists (defect)) ?

Кто такой умасс я не догадываюсь, но слова модуль и дефект таки порождают смутные ассоциации из объективной реальности. И что-то мне шепчет, что у реального модуля вряд ли бывает больше пяти типов возможных дефектов. А вот один и тот же дефект (например, "не фурычит") может иметь чортова прорва типов модулей. То есть, количество возможных типов дефектов, по сравнению со всевозможными модулями, скорее всего, зело ограниченное. Начинать перебор от них мне представляется разумным. Хотя могу быть введён в заблуждение семантическими экивоками.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521903
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev,

во-первых не по натуралы, а внешней сортировкой.А "внешняя сортировка" в плане как выглядит? PLAN SORT(table NATURAL) - сортировка по значениям всех полей в SELECT записей, отобранных без использования индекса?

Симонов ДенисВо-вторых distinct применяется ко всем полям в предложении select. А в-третьих с чего ты взял что навигация по индексы будет быстрее при полном фетче?Если все указанные в SELECT поля попадают в индекс, что мешает планировщику использовать именно индекс? Всего лишь отсутствие такой возможности, не так ли?
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521904
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvНе пробовал вариант - from modul where exists (from umass where exists (defect)) ?
Примерно тоже самое.
Необычный результат получается, если попробовать использовать конструкцию "first 1". Может попробовать перебрать возможные варианты с ней? А?
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521908
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаслова модуль и дефект таки порождают смутные ассоциации из объективной реальности. И что-то мне шепчет, что у реального модуля вряд ли бывает больше пяти типов возможных дефектов. А вот один и тот же дефект (например, "не фурычит") может иметь чортова прорва типов модулей. То есть, количество возможных типов дефектов, по сравнению со всевозможными модулями, скорее всего, зело ограниченное. Начинать перебор от них мне представляется разумным. Хотя могу быть введён в заблуждение семантическими экивоками.
Кстати, да, +1.

KreatorXXI> Мне представляется невозможным просчитывать
KreatorXXI> соотношения количества записей в таблицах.

Гм... Ну если сам не можешь просчитать - хоть аналитика
постановщика вашего спроси/попроси.

KreatorXXI> И фильтров, собственно, нет.

Да ладно врать... ОК, вот выбрал ты записи каким-то макаром,
получил из ляма 15 тыщ - дальше с ними что собрался делать?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521910
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI> Необычный результат получается

Чем же он необычный? Быстрее или результат отличается?

> Может попробовать перебрать возможные варианты с ней? А?

Не может. "first 1" с Exist-ом не нужен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521994
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант "а-ля DISTINCT" использующий индексы.
Код: sql
1.
2.
3.
4.
SELECT m.id_mdl
  FROM (SELECT id_ums, Count(*) FROM defect GROUP BY id_ums) d
    INNER JOIN umass um ON um.id_ums = d.id_ums
    INNER JOIN modul m ON m.id_mdl = um.id_mdl
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39521997
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

не правильный запрос. У него defect->umass->modul
Т.е. производную таблицу с GROUP BY надо делать по связке двух таблиц. Я этот вариант уже приводил через CTE
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522097
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev,
Т.е. производную таблицу с GROUP BY надо делать по связке двух таблиц. Я этот вариант уже приводил через CTEСогласен!
Проглядел приведенный тобой код.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522135
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
select a.sn_mdl
from modul a
where exists ( select *
               from umass b
               left join defect c on c.id_ums=b.id_ums
               where b.id_mdl=a.id_mdl
                 and c.id_ums is not null)
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522423
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаХотя могу быть введён в заблуждение семантическими экивоками.
Именно так. В defect пишутся выявленные проблемы в изделии.

vvvaitа так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
select a.sn_mdl
from modul a
where exists ( select *
               from umass b
               left join defect c on c.id_ums=b.id_ums
               where b.id_mdl=a.id_mdl
                 and c.id_ums is not null)


По барабану, всё также. Что называется - "От перемены мест слагаемых сумма не меняется".

Попробовал через хранимку, через "for select". Банально, находится запись в defect, выходим из хранимки. С точки зрения количества сканированных записей получен очень хороший результат, раз в 30 меньше. Но с точки зрения времени выполнения - очень плохо. Время уходит на подготовку "for select"? Или сам вызов хранимки?
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522428
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIБанально, находится запись в defect, выходим из хранимки.

Это ничем не отличается от exists, только тормознее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522429
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI> В defect пишутся выявленные проблемы в изделии.

А umass что?

> Попробовал через хранимку, через "for select". Банально, находится
> запись в defect, выходим из хранимки.

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

> С точки зрения количества сканированных записей получен очень
> хороший результат, раз в 30 меньше.

Не похоже на правду. Показывай текст хранимки, планы и
время + количество фетчей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522430
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

а как ты это количество сканированных записей определяешь?
Трейсом что ли?
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522432
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvaitwhere exists ( select *
from umass b
left join defect

так получится, что umass left join defect выдаст ВСЕ записи из umass для проверки на exists, а без defect они к делу не относятся.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522446
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
SELECT DISTINCT a.sn_mdl
FROM defect c
 JOIN umass b ON c.id_ums+0=b.id_ums
 JOIN  modul a ON b.id_mdl+0=a.id_mdl



?

Предполагается, что все индексы имеют место быть.
...
Рейтинг: 0 / 0
Exists по двум или более таблицам
    #39522453
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка
Код: sql
1.
2.
3.
4.
SELECT DISTINCT a.sn_mdl
FROM defect c
 JOIN umass b ON c.id_ums+0=b.id_ums
 JOIN  modul a ON b.id_mdl+0=a.id_mdl


?

Предполагается, что все индексы имеют место быть.
Индексы для дистинкт? :)
...
Рейтинг: 0 / 0
25 сообщений из 108, страница 3 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Exists по двум или более таблицам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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