powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / 500 джойнов и IN
25 сообщений из 88, страница 2 из 4
500 джойнов и IN
    #38492986
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeМожно, чтобы не переписывать существующий sql-код, пойти ещё дальше -
распарсить sql, вытащить из него элементы IN, вставить их во временную таблицу, исправить
sql на join или merge, и отдать серверу :)
Назачем? "Нормальные герои всегда идут в обход"? (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493009
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамПри чём тут скрипты и код? Пользователи как 1500
записей в гриде выбирают?

Наример так: загружают данные за период (условие в where), затем средствами devex-грида фильтруют-сортируют как им вздумается (это уже локально), затем в отфильтрованом выбирают либо инсертом (если им нужно отметить несколько записей), либо нажатием * (инвертировать выделение) с последующим деселектом ненужных записей. Дальше жмётся кнопка, которая делает определённые действия для отмеченых записей.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493014
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> либо нажатием * (инвертировать выделение)
NickDee> Дальше жмётся кнопка

Ч.Т.Д.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493018
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамПользователи как 1500 записей в гриде выбирают?
поскольку эта песня с 1500 записей вылезает регулярно уже несколько лет, насколько я помню, были следующие объяснения:

неправдоподобное - пользователь кликает несколько часов в гриде на чекбоксы
правдоподобное - пользователь кликает на элемент группы, автоматически чекаются все "товары подгруппы", таким образом, если 1 клик выбирает 300 элементов, за 5 кликов элементарно набрать 1500 элементов. Но тут не очень непонятно, почему нужно выбирать по элементам, а не по группам.

В одной системе через ФБСканер мы отловили ситуацию, когда пользователь своими действиями генерил тучу версий, которые превращались в мусор - типа, набрать заказ, что-то сделать с ним, потом копирнуть результат в другой заказ, а набранный целиком удалить. Т.е. полезное действие мелкое, а версий плодится немеряно. Разработчики не ожидали, что пользователь так будет использовать их функционал, в результате переписали код, по-моему как процедуры, так и приложение. Чтобы оставить пользователю возможность, но не насиловать сервер бессмысленными операциями.

Кстати, вот у MS SQL написано
Включение очень большого количества значений (много тысяч) в предложение IN может привести к интенсивному расходованию ресурсов и возврату ошибки 8623 или 8632. Чтобы избежать этой проблемы, храните элементы списка IN в таблице .
при скольких элементах ошибка возникает - не указано.

У Оракла (как минимум версии 8)
ORA-01795 maximum number of expressions in a list is 1000

у PostgreSQL я вообще не нашел какого-либо описания IN. может ослеп, не знаю.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493020
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

понял. Тем не менее, лучи ненависти можешь аналогично посылать Ораклу и Микрософту (см. предыдущее сообщение). И Микрософт тоже говорит - переписывайте на объединение таблиц.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493040
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамNickDee> либо нажатием * (инвертировать выделение)
NickDee> Дальше жмётся кнопка

Ч.Т.Д.
Человеку нужны все документы за период, кроме документов менеджера Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить документы без номера.
Он выставляет период, снимает в devex-овском фильтре по столбцу "Менеджер" три соответствующих чекбокса, ставит значение "(Не пустые)" в фильтре по столбцу "Номер", и получает на экране то, что ему нужно обработать. Это может быть как 10 записей, так и 10000.
Дальше жмёт * и жмёт кнопку обработки. Дальше ты знаешь что происходит :)
Особо обращаю твоё внимание, что локальный фильтр в devex-гриде может быть очень навороченым, настолько, что не смапится на sql-условие. А если ещё учесть, что он может быть сделан по вычисляемым на клиенте полям, то задача конвертации фильтра в sql-условие становится в общем виде нерешаемой.
Так что остаётся только список ID :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493065
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvNickDee,

понял. Тем не менее, лучи ненависти можешь аналогично посылать Ораклу и Микрософту (см. предыдущее сообщение). И Микрософт тоже говорит - переписывайте на объединение таблиц.
Мда... :)
Оптимизатору есть из чего догадаться, что вместо развёртывания IN на OR-ы эффективней сделать джойн?
А можно ли сделать так, что до 1500 элементов оно работает как сейчас, а после - не падает с ошибкой, а делает виртульный джойн (если он возможен)? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493080
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeОптимизатору есть из чего догадаться, что вместо развёртывания IN на OR-ы эффективней сделать джойн?
с "таблицей в памяти"?
Представь себе, что ты вместо ФБ работаешь с Ораклом. И обламываешься на 1000 элементах. Твои действия?

p.s. не грузи разработчиков ФБ фигней. У них есть другие, более важные дела.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493128
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeГаджимурадов РустамNickDee> либо нажатием * (инвертировать выделение)
NickDee> Дальше жмётся кнопка

Ч.Т.Д.
Человеку нужны все документы за период, кроме документов менеджера Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить документы без номера.
Он выставляет период, снимает в devex-овском фильтре по столбцу "Менеджер" три соответствующих чекбокса, ставит значение "(Не пустые)" в фильтре по столбцу "Номер", и получает на экране то, что ему нужно обработать. Это может быть как 10 записей, так и 10000.
Дальше жмёт * и жмёт кнопку обработки. Дальше ты знаешь что происходит :)
Особо обращаю твоё внимание, что локальный фильтр в devex-гриде может быть очень навороченым, настолько, что не смапится на sql-условие. А если ещё учесть, что он может быть сделан по вычисляемым на клиенте полям, то задача конвертации фильтра в sql-условие становится в общем виде нерешаемой.
Так что остаётся только список ID :)

Встречал такую фигню еще у фокспрошников в налоговой. Очень удобно - выбираешь все четные дома улицы + еще два дома + всех Петровых в квартале + одного конкретного Сидорова.

Попробуй на досуге представить это в виде IN. Во временной таблице - только ID лицевых счетов. и это работало еще до Путина!
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493277
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeПочему я должен быть ограничен константой в коде? Просто потому что кто-то решил что конкретного N должно хватить на все задачи, доступные к осознанию того кто ставит этот N? :) А если некоторые задачи не подвластны его осознанию? :)
т.е. другие причины введения этого ограничения, кроме как природной ограниченности этого "кого-то", ты не мыслишь? Скажем, что могут быть ограничения реализации, связанные с рекурсивностью обработки и статическим ограничением размера стека процесса сервера? И что если этот лимит тупо убрать, то сервер начнет тупо падать. Тебе же оттуда виднее, как лучше, ага. Все вокруг враги, один я д'Артаньян?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493299
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Человеку нужны все документы за период, кроме
NickDee> документов менеджера Иванова, менеджера Петрова,
NickDee> и менеджера Сидорова, и нужно исключить документы без номера.

Значит, нужно сгенерить соотв. SQL-выражение.

NickDee> Это может быть как 10 записей, так и 10000.

Именно. Повысив с 1500 до 3000 - упрёшься снова.

NickDee> Особо обращаю твоё внимание, что локальный фильтр
NickDee> в devex-гриде может быть очень навороченым, настолько,
NickDee> что не смапится на sql-условие. А если ещё учесть, что он
NickDee> может быть сделан по вычисляемым на клиенте полям,

Вообще говоря, это враньё. Не говоря уже о том, что
фильтр по локальным полям на клиенте никакого
отношения к фильтру по ID на сервере не имеет.

Но если лень делать через Where-фильтр, то делай
через таблицу, как подсказывают. Или не делай и
продолжай вопить дальше.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493728
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамИменно. Повысив с 1500 до 3000 - упрёшься снова.странно, в форуме давно опубликован "костыль" ака list_to_rows, в котором сей предел задвинут "в хрензнаткуда", а обсуждение несчастного IN все так же горячо.

Гаджимурадов РустамПри чём тут скрипты и код? Пользователи как 1500
записей в гриде выбирают?У нас есть фанаты маркетологи, которые могут именно больше тыщи записей в гриде нах***** (простите мой аглицкий, но другое слово хрен подберешь) именно никак не формализуемых записей и потом назначить им "ценовую акцию" или там параметры какие подправить, шоб "продавались веселей".

in у нас не канает совсем. Пометки живут в нормальной стационарной (не gtt) таблице, чтоб не потерять "годы труда" на случай если связь глюканет или там клиент по каким-то причинам сдохнет или автор решит "продолжить завтра".

фильтров каких только не наделали, вот буквально в пятницу закоммитил очередной патч по фильтрации, но все едино натюкивают тонны записей руками. В общем токмо джойны, только хардкор, никаких полумер ака in !!!
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38494396
protector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает уважаемому NickDee использовать вместо одного несколько in ?
Если уж так хочется.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500360
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee пишет:

> Человеку нужны все документы за период, кроме документов менеджера
> Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить
> документы без номера.

Процитированное - это "всё, кроме указанных"
А получение результата указанием списка ID - это "только указанные".

Как бы 2 большие разницы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500565
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевич> Процитированное - это "всё, кроме указанных"
> А получение результата указанием списка ID - это "только указанные".

Это ты знаешь, человек. А программа ИИ не обладает,
каким образом сформированы галочки в гриде она не
знает (и даже тупо NOT IN не может сделать), посему
ТС пошёл по пути меньшего сопротивления.

Просто это неуместный плач Ярославны и проблемы
не сервера, а тупых горе-пользователей и ленивого
разработчика, который хочет переложить проблемы
со своих плеч на сервер или кого бы то ни было.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500606
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамПросто это неуместный плач Ярославны и проблемы
не сервера, а тупых горе-пользователей и ленивого
разработчика, который хочет переложить проблемы
со своих плеч на сервер или кого бы то ни было.

Разработчик действительно ленив. Горе-пользователи действительно тупы. Проблемы сервера тут действительно нет :)

Почему 256 джойнов? Потому что в байте 8 бит, а восемью битами можно закодировать только 256 значений. Это не ограничение сервера, это ограничение в архитектуре байта :)

Тут dmitry недавно д'артаньяна вспоминал :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500622
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Тут dmitry недавно д'артаньяна вспоминал :)

В зеркало не пробовал посмотреться?

Объясняю ещё раз, последний:

1. Ресурсы не бесконечны, ограничение всё равно будет.
Если увеличить с 1500 до 3000 или даже 10000 - это не
поможет и лишь уменьшит частоту втыкания в потолок.

2. Есть несколько и нормальных решений и воркэраундов,
ты их то ли не видишь/не слышишь, то ли пытаешься
проявить какую-то упёртость - с этим сразу в сад.

3. Твоё решение в данном конкретном случае ещё и
невыгодно пользователям (с т.з. производительности) -
я не проверял, но IN на 10000 в любом случае должен
проиграть нормальному Where-фильтру, даже плохо
индексированному. Разработчику (тебе) - да, удобно
и выгодно, тупо по SelectedRows пробежался, IDшечки
в запрос собрал (без параметров, кстати) и готово.
Вместо того, чтобы наращивать функциональность
фильтров и поисков. У тебя фильтр "в найденном"
есть хотя бы, кстати?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500627
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> невыгодно пользователям (с т.з. производительности) -
> я не проверял, но IN на 10000 в любом случае должен
> проиграть нормальному Where-фильтру, даже плохо индексированному

Впрочем, нет, тут надо у ДЕ уточнять.
Скорее всего, сервер просто соберёт
битмап и пройдёт одним проходом.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500638
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

не будет одного прохода, будут тормоза :-)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500643
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> не будет одного прохода, будут тормоза :-)

А почему нельзя собрать всё за один (или пачками) проход?
А сами записи уже потом извлекать и проверять.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500655
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Вернёмся к джойнам.
Ты представляешь себе что имеет право существовать система из двух таблиц, в которой есть 500 справочников? Все справочники находятся в одной таблице... Наверняка представляешь.
А можешь себе представить вторую таблицу, в которой 500 FK на таблицу справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)?
А можешь себе представить, что нужно селектнуть запись из таблички с 500 FK, но не просто селектнуть, а с соответствующими значениями из таблицы справочника, причём не какие-то несколько полей, а все 500?
Не можешь себе представить как у одной сущности может быть 500FK? Не было таких задач? Не представляешь кому может пригодиться сразу 500 значений? А если представляешь, то знаешь как обойти ограничение в 255 джойнов? Двумя запросами? :)
А как это должна обходить какая-нибудь ORM-система с автогенерацией SQL? Никак? А кто сделал больше 255 FK, тот идиот, и задачи у него заведомо идиотские? :) А до скольки FK он ещё не идиот? :) До 255? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500662
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeА можешь себе представить вторую таблицу, в которой 500 FK на таблицу
справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)?
Я уверен, что Рустам на своём модераторском веку повидал достаточно идиотов, так что
представить себе такого, который не знает как делается связь N:M, он, определённо, сумеет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500674
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeА можешь себе представить вторую таблицу, в которой 500 FK на таблицу
справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)?
Я уверен, что Рустам на своём модераторском веку повидал достаточно идиотов, так что
представить себе такого, который не знает как делается связь N:M, он, определённо, сумеет.

Я про ограничения FB. А ты про что? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500678
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЯ про ограничения FB. А ты про что? :)
А я про анацефала - проектировщика БД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500688
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeА кто сделал больше 255 FK, тот идиотДа
NickDeeи задачи у него заведомо идиотские?Нет

Одно с другим никак не связано. Новость ? :)
...
Рейтинг: 0 / 0
25 сообщений из 88, страница 2 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / 500 джойнов и IN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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