|
|
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
hvladТаблоидчто такое "контекст" ?Во время выполнения запрос вычисляет и хранит состояние каждого потока данных (таблицы в простейшем случае). Грубо говоря - текущую запись из каждого потока. Операторы BLR принимают номера потоков (контекстов) как параметры. Номер контекста кодируется 1 байтом, отсюда ограничение. Т.е. если какой-нибудь генератор sql-кода сгенерит 256 джойнов одним селектом, то всё пропало? Если это так, то можно ли отодвинуть это ограничение хотя бы до размера word? У меня вот 175 джойнов генерится, при этом вытаскиваются 560 полей из примерно 30 таблиц. Это для печати отчёта. Лишних полей там нет, т.е. они либо печатаются, либо участвуют в вычислениях в отчёте. Это не табличный отчёт, а одностраничный документ с детальными характеристиками покупаемого изделия (много цифр, много букв). И запрос уже на 45 килобайт... Простой селект одной записи с кучей джойнов. И я вполне допускаю, что со временем система может перешагнуть и через 64K на этом запросе, и через 256 джойнов. Я могу конечно запрос побить на два, причём прозрачно для отчётера (fastreport), на уровне кода сервера приложений. Но имхо универсальней будет убрать ограничение в дальние дали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 23:10:32 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee, для Fb3 ограничение в 64K на длину запроса сняли. А вот ограничения на контексты не трогали. dimitr, hvlad интересно а вот в таком запросе Код: sql 1. количество контекстов будет равно 1 или 1 + количество контекстов из ХП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 23:17:40 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Т.е. если какой-нибудь генератор sql-кода сгенерит NickDee> 256 джойнов одним селектом, то всё пропало? Почему всё пропало? Ни с сервером, ни с БД ничего не происходит, а запрос не выполнится, да. Симонов Денис> количество контекстов будет равно 1 Симонов Денис> или 1 + количество контекстов из ХП? По логике вещей должно быть, конечно, 1, ибо внутри ХП - свой отдельный контекст. Иначе мы все давно наступили бы на это ограничение из-за больших/вложенных ХП. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 23:42:14 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
hvladNickDeeможно ли отодвинуть это ограничение хотя бы до размера word?Нет. Что-то поломается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 23:58:09 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамNickDee> Т.е. если какой-нибудь генератор sql-кода сгенерит NickDee> 256 джойнов одним селектом, то всё пропало? Почему всё пропало? Ни с сервером, ни с БД ничего не происходит, а запрос не выполнится, да. Вот представь, что у тебя есть табличка, в которой среди прочих есть четыре поля: FirstDocId, SecondDocId, ThirdDocId, FourthDocId (ссылаются на одну табличку Docs). И у тебя есть вьюшка по таблице. И вот тебе говорят, что во вьюшку нужно добавить четыре поля: FirstDocId.ManagerId.ServerId.DealerId.CountryId.Name SecondDocId.ManagerId.ServerId.DealerId.CountryId.Name ThirdDocId.ManagerId.ServerId.DealerId.CountryId.Name FourthDocId.ManagerId.ServerId.DealerId.CountryId.Name Каждое такое поле развернётся в 5 joins, итого +20. Понятно что имея инструмент, который позволяет строить такие вьюшки на раз-да, без написания sql вручную, то можно вполне наступить на ограничение в 256 joins на сложных базах. У меня база совсем не сложная по структуре, а 175 joins на запрос уже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 00:46:19 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeВот представь, что у тебя есть табличка, в которой среди прочих есть четыре поля: FirstDocId, SecondDocId, ThirdDocId, FourthDocId (ссылаются на одну табличку Docs). И у тебя есть вьюшка по таблице. "Вот представь, что у разработчика БД нет головного мозга, совсем. А у программиста приложения руки растут из задницы." Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 00:57:09 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Вот представь Зачем? Способов создать себе проблемы я итак больше тебя знаю. Не надо плодить плохие вьюшки/ХП, а если наплодил - не надо удивляться, что они потом плохо/медленно работают. AFAIU, основной "законный" способ получить сабж - это различные графические построители запросов/отчетов, но лично я на это ограничение и там не натыкался - юзеры, видимо, тоже не могут удержать в голове/на экране такое количество инфы, колонок, полей и пр. Повторюсь, ничего не "пропало". Запрос не сработает, да. Сервер не упадёт, БД не порушится. Ура. А недовольные пользователи вызовут "программиста", который налабает им SQL-запрос, работающий на два порядка быстрее их мышетыкательного варианта, даже если бы он взлетел. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 01:35:23 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамNickDee> Вот представь Зачем? Способов создать себе проблемы я итак больше тебя знаю. Проблем нет, пока ты не наступаешь на ограничение. Вот начинаешь работать с движком БД, а там - то ограничение на количество элементов в IN, то на размер стейтмента, то на размер таблицы, то на длину имени поля, то на суммарный размер всех полей в таблице. Лично я наступил на ограничение с IN, на размер стейтмента, на ограничение длины поля. Пришлось выкручиваться. Спрашиваешь - почему бы не изменить такое поведение? В ответ получаешь телегу как правильно писать. В том-то и дело, что писать надо так, чтобы не создавать глупых ограничений :) А если они унаследованы из чужого кода, и пользователи просят изменить ограничение пока никто не наступил, то почему это просто не сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 12:28:49 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeА если они унаследованы из чужого кода, и пользователи просят изменить ограничение пока никто не наступил, то почему это просто не сделать?Может потому, что это НЕ просто сделать ? Может потому, что это нужно 1% тех самых пользователей ? Может потому, что нужно научиться работать с чем-то, и не наступать на ограничения, как остальные 99% ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 12:36:39 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeСпрашиваешь - почему бы не изменить такое поведение? В ответ получаешь телегу как правильно писать дай вам волю, вы процедуры по 10 мегабайт писать будете. NickDeeто почему это просто не сделать? потому что ряд подобных изменений требует изменений в движке, которые могут повлиять неизвестно на что. И потому что не бывает софта без ограничений. Всегда есть какой-то лимит, и всегда на этот лимит кто-то наступит, обязательно. Есть лимиты старые, которые можно или легко или с определенными усилиями изменить. И они меняются. Например, 36 гиг на одну таблицу, разрядность генератора, Next transaction, ... Ну растут данные, что поделать. Но есть определенные лимиты, которые выходят за здравый смысл. Например, размер оператора. В ЯП ведь уже много лет есть правило - размер процедуры не должен превышать размер экрана (допустим, 120 строк). Почему в SQL это можно "нарушать"? А с IN - насколько бы тебе его увеличить хотелось? 2500? 5000? 10000? Я гарантирую, что после увеличения до 10к обязательно тут же кто то на это наступит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 12:40:21 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
kdvNickDeeСпрашиваешь - почему бы не изменить такое поведение? В ответ получаешь телегу как правильно писать дай вам волю, вы процедуры по 10 мегабайт писать будете. И что конкретно тебя в этом пугает? :) Ну будут у меня стейтменты по 10 мегабайт, или по сто. Мне так удобно, и мне с ними жить :) Почему я должен быть ограничен константой в коде? Просто потому что кто-то решил что конкретного N должно хватить на все задачи, доступные к осознанию того кто ставит этот N? :) А если некоторые задачи не подвластны его осознанию? :) kdvNickDeeто почему это просто не сделать? потому что ряд подобных изменений требует изменений в движке, которые могут повлиять неизвестно на что. И потому что не бывает софта без ограничений. Всегда есть какой-то лимит, и всегда на этот лимит кто-то наступит, обязательно. Есть лимиты старые, которые можно или легко или с определенными усилиями изменить. И они меняются. Например, 36 гиг на одну таблицу, разрядность генератора, Next transaction, ... Ну растут данные, что поделать. Но есть определенные лимиты, которые выходят за здравый смысл. Например, размер оператора. В ЯП ведь уже много лет есть правило - размер процедуры не должен превышать размер экрана (допустим, 120 строк). Почему в SQL это можно "нарушать"? Потому что стейтменты могут быть сгенерённые. Собственно при генерации кода для триггера я и наступил на ограничение. kdvА с IN - насколько бы тебе его увеличить хотелось? 2500? 5000? 10000? Я гарантирую, что после увеличения до 10к обязательно тут же кто то на это наступит. Я наступил на 1500. И естественно это была автогенерация кода :) Пользователь в гриде выделял записи, и я их для групповой обработки вставлял в "where ID in (...)". Ограничение должно быть как можно выше, и я бы не стал ограничиваться размером WORD. Пусть работает медленней, пусть противоречит чьей-то девелоперской совести, но пусть работает... это уже будет выбор того, кто это использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 13:12:57 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee, Ну так возьми да и сделай, раз все так просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 14:01:07 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeПользователь в гриде выделял записи, и я их для групповой обработки вставлял в "where ID in (...)". Потому что использовать для этого временную таблицу у тебя не хватило... чего? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 14:10:52 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeПользователь в гриде выделял записи, и я их для групповой обработки вставлял в "where ID in (...)". Потому что использовать для этого временную таблицу у тебя не хватило... чего? Ты сейчас спрашиваешь о том, почему я вместо того чтобы написать простой "where ID in (...)", не создал временную таблицу, потом не сделал в неё N инсертов, а потом не написал "where Id in select from ..."? :) Ты сейчас про это спрашиваешь? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 14:27:34 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeТы сейчас про это спрашиваешь? :) Именно так. Только не in, а join. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 14:45:04 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeТы сейчас про это спрашиваешь? :) Именно так. Только не in, а join. если делать с джойном, то тогда лучше без временной таблицы. Мы это тут обсуждали пять лет назад: 6343890 :) Но это настоящий изврат, правда меньший чем с инсертами :) Быстро работает, да. Но изврат :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 15:07:39 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeесли делать с джойном, то тогда лучше без временной таблицы. Нет, не лучше. Во-первых, более сложный код на клиенте. Во-вторых, более сложный код на сервере. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 15:18:50 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeесли делать с джойном, то тогда лучше без временной таблицы. Мы это тут обсуждали пять лет назад: 6343890 :) Но это настоящий изврат, правда меньший чем с инсертами :) Быстро работает, да. Но изврат :)0xFF. 2 NickDee: ты там разбиваешь список ИДшников на "слова" и выдаёшь из процедуры наружу отдельные ИДшники - я правильно понимаю ? Что делает с входным блобом (IntStr) твоя УДФ CreateIntList(IntStr, ListId, Cnt) ? И откудова вытаскивает ID'шник вот эта штука: ValueInList(ListId, I, V) ? (ListId - это же integer, а не блоб... я слабо как-то понимаю тамошний код...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 15:48:32 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeПользователь в гриде выделял записи ой, опять про выделение пользователем в гриде полутора тысяч записей.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 19:37:02 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
kdv> ой, опять про выделение пользователем в гриде полутора тысяч записей.... Да на самом деле там где-нибудь "выделить все" или выделить диапазон, а обработать нормально это дело автору лень, нехай сервер трудится, он же железный. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 20:30:56 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
ТаблоидNickDeeесли делать с джойном, то тогда лучше без временной таблицы. Мы это тут обсуждали пять лет назад: 6343890 :) Но это настоящий изврат, правда меньший чем с инсертами :) Быстро работает, да. Но изврат :)0xFF. 2 NickDee: ты там разбиваешь список ИДшников на "слова" и выдаёшь из процедуры наружу отдельные ИДшники - я правильно понимаю ? Да. ТаблоидЧто делает с входным блобом (IntStr) твоя УДФ CreateIntList(IntStr, ListId, Cnt) ? Она создаёт из блоба IntStr список чисел, возвращает ассоциированный с этим списком ListId, и возвращает в Cnt количество элементов в списке. ТаблоидИ откудова вытаскивает ID'шник вот эта штука: ValueInList(ListId, I, V) ? (ListId - это же integer, а не блоб... я слабо как-то понимаю тамошний код...) Она вытаскивает их из списка, который ассоциирован с ListId. Кстати Blob это же реально Int64, привязанный к данным, и имеющий методы работы с этими данными :) Вот тут по аналогии: ListId привязан к списку, и есть методы работы с этим списком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 20:38:35 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамkdv> ой, опять про выделение пользователем в гриде полутора тысяч записей.... Да на самом деле там где-нибудь "выделить все" или выделить диапазон, а обработать нормально это дело автору лень, нехай сервер трудится, он же железный. Ну ты знаешь, у меня код в скриптах прописан, и достаточно сильно абстрагирован от грида. Там (в скрипте) торчит функция, типа GetMarkedIdList: TIntegerDynArray. С моей точки зрения именно список Id из грида и является теми данными, которые ожидает скриптовая процедура обработки, желающая обработать отмеченные записи :) Я так и реализовал. Я эту функцию вызываю, получаю список отмеченных Id, и в скрипте пишу например такой sql-запрос: "update T set IsProcessed = 1 where Id in (' + IntListToStr(GetMarkedIdList) + ')". Почти одной строчкой. Все шаги очевидны и понятны. А вы что предлагаете? :) Я sql-серверу на его собственном языке говорю: поставь IsProcessed = 1, для записей у которых Id принадлежит указанному множеству значений. Чего не так? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 20:59:40 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeЯ эту функцию вызываю, получаю список отмеченных Id, и в скрипте пишу например такой sql-запрос: "update T set IsProcessed = 1 where Id in (' + IntListToStr(GetMarkedIdList) + ')". Почти одной строчкой. Все шаги очевидны и понятны. А вы что предлагаете? :) Две строки: Код: sql 1. 2. Все шаги очевидны и понятны. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 21:38:53 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeЯ эту функцию вызываю, получаю список отмеченных Id, и в скрипте пишу например такой sql-запрос: "update T set IsProcessed = 1 where Id in (' + IntListToStr(GetMarkedIdList) + ')". Почти одной строчкой. Все шаги очевидны и понятны. А вы что предлагаете? :) Две строки: Код: sql 1. 2. Все шаги очевидны и понятны. Это я понимаю. Можно, чтобы не переписывать существующий sql-код, пойти ещё дальше - распарсить sql, вытащить из него элементы IN, вставить их во временную таблицу, исправить sql на join или merge, и отдать серверу :) Будет почти универсальный воркэраунд для IN. Но это и есть изврат :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 22:18:11 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Ну ты знаешь, у меня код в скриптах прописан, NickDee> и достаточно сильно абстрагирован от грида. NickDee> С моей точки зрения именно список Id из грида При чём тут скрипты и код? Пользователи как 1500 записей в гриде выбирают? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 23:02:48 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeМожно, чтобы не переписывать существующий sql-код, пойти ещё дальше - распарсить sql, вытащить из него элементы IN, вставить их во временную таблицу, исправить sql на join или merge, и отдать серверу :) Назачем? "Нормальные герои всегда идут в обход"? (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2013, 23:37:53 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамПри чём тут скрипты и код? Пользователи как 1500 записей в гриде выбирают? Наример так: загружают данные за период (условие в where), затем средствами devex-грида фильтруют-сортируют как им вздумается (это уже локально), затем в отфильтрованом выбирают либо инсертом (если им нужно отметить несколько записей), либо нажатием * (инвертировать выделение) с последующим деселектом ненужных записей. Дальше жмётся кнопка, которая делает определённые действия для отмеченых записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 00:45:05 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> либо нажатием * (инвертировать выделение) NickDee> Дальше жмётся кнопка Ч.Т.Д. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 00:56:25 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамПользователи как 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. может ослеп, не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 01:04:44 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee, понял. Тем не менее, лучи ненависти можешь аналогично посылать Ораклу и Микрософту (см. предыдущее сообщение). И Микрософт тоже говорит - переписывайте на объединение таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 01:05:59 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамNickDee> либо нажатием * (инвертировать выделение) NickDee> Дальше жмётся кнопка Ч.Т.Д. Человеку нужны все документы за период, кроме документов менеджера Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить документы без номера. Он выставляет период, снимает в devex-овском фильтре по столбцу "Менеджер" три соответствующих чекбокса, ставит значение "(Не пустые)" в фильтре по столбцу "Номер", и получает на экране то, что ему нужно обработать. Это может быть как 10 записей, так и 10000. Дальше жмёт * и жмёт кнопку обработки. Дальше ты знаешь что происходит :) Особо обращаю твоё внимание, что локальный фильтр в devex-гриде может быть очень навороченым, настолько, что не смапится на sql-условие. А если ещё учесть, что он может быть сделан по вычисляемым на клиенте полям, то задача конвертации фильтра в sql-условие становится в общем виде нерешаемой. Так что остаётся только список ID :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 01:40:19 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
kdvNickDee, понял. Тем не менее, лучи ненависти можешь аналогично посылать Ораклу и Микрософту (см. предыдущее сообщение). И Микрософт тоже говорит - переписывайте на объединение таблиц. Мда... :) Оптимизатору есть из чего догадаться, что вместо развёртывания IN на OR-ы эффективней сделать джойн? А можно ли сделать так, что до 1500 элементов оно работает как сейчас, а после - не падает с ошибкой, а делает виртульный джойн (если он возможен)? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 02:21:10 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeОптимизатору есть из чего догадаться, что вместо развёртывания IN на OR-ы эффективней сделать джойн? с "таблицей в памяти"? Представь себе, что ты вместо ФБ работаешь с Ораклом. И обламываешься на 1000 элементах. Твои действия? p.s. не грузи разработчиков ФБ фигней. У них есть другие, более важные дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 02:53:57 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeГаджимурадов РустамNickDee> либо нажатием * (инвертировать выделение) NickDee> Дальше жмётся кнопка Ч.Т.Д. Человеку нужны все документы за период, кроме документов менеджера Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить документы без номера. Он выставляет период, снимает в devex-овском фильтре по столбцу "Менеджер" три соответствующих чекбокса, ставит значение "(Не пустые)" в фильтре по столбцу "Номер", и получает на экране то, что ему нужно обработать. Это может быть как 10 записей, так и 10000. Дальше жмёт * и жмёт кнопку обработки. Дальше ты знаешь что происходит :) Особо обращаю твоё внимание, что локальный фильтр в devex-гриде может быть очень навороченым, настолько, что не смапится на sql-условие. А если ещё учесть, что он может быть сделан по вычисляемым на клиенте полям, то задача конвертации фильтра в sql-условие становится в общем виде нерешаемой. Так что остаётся только список ID :) Встречал такую фигню еще у фокспрошников в налоговой. Очень удобно - выбираешь все четные дома улицы + еще два дома + всех Петровых в квартале + одного конкретного Сидорова. Попробуй на досуге представить это в виде IN. Во временной таблице - только ID лицевых счетов. и это работало еще до Путина! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 09:21:17 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeПочему я должен быть ограничен константой в коде? Просто потому что кто-то решил что конкретного N должно хватить на все задачи, доступные к осознанию того кто ставит этот N? :) А если некоторые задачи не подвластны его осознанию? :) т.е. другие причины введения этого ограничения, кроме как природной ограниченности этого "кого-то", ты не мыслишь? Скажем, что могут быть ограничения реализации, связанные с рекурсивностью обработки и статическим ограничением размера стека процесса сервера? И что если этот лимит тупо убрать, то сервер начнет тупо падать. Тебе же оттуда виднее, как лучше, ага. Все вокруг враги, один я д'Артаньян? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 15:47:24 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Человеку нужны все документы за период, кроме NickDee> документов менеджера Иванова, менеджера Петрова, NickDee> и менеджера Сидорова, и нужно исключить документы без номера. Значит, нужно сгенерить соотв. SQL-выражение. NickDee> Это может быть как 10 записей, так и 10000. Именно. Повысив с 1500 до 3000 - упрёшься снова. NickDee> Особо обращаю твоё внимание, что локальный фильтр NickDee> в devex-гриде может быть очень навороченым, настолько, NickDee> что не смапится на sql-условие. А если ещё учесть, что он NickDee> может быть сделан по вычисляемым на клиенте полям, Вообще говоря, это враньё. Не говоря уже о том, что фильтр по локальным полям на клиенте никакого отношения к фильтру по ID на сервере не имеет. Но если лень делать через Where-фильтр, то делай через таблицу, как подсказывают. Или не делай и продолжай вопить дальше. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2013, 16:54:10 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамИменно. Повысив с 1500 до 3000 - упрёшься снова.странно, в форуме давно опубликован "костыль" ака list_to_rows, в котором сей предел задвинут "в хрензнаткуда", а обсуждение несчастного IN все так же горячо. Гаджимурадов РустамПри чём тут скрипты и код? Пользователи как 1500 записей в гриде выбирают?У нас есть фанаты маркетологи, которые могут именно больше тыщи записей в гриде нах***** (простите мой аглицкий, но другое слово хрен подберешь) именно никак не формализуемых записей и потом назначить им "ценовую акцию" или там параметры какие подправить, шоб "продавались веселей". in у нас не канает совсем. Пометки живут в нормальной стационарной (не gtt) таблице, чтоб не потерять "годы труда" на случай если связь глюканет или там клиент по каким-то причинам сдохнет или автор решит "продолжить завтра". фильтров каких только не наделали, вот буквально в пятницу закоммитил очередной патч по фильтрации, но все едино натюкивают тонны записей руками. В общем токмо джойны, только хардкор, никаких полумер ака in !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2013, 10:35:20 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
А что мешает уважаемому NickDee использовать вместо одного несколько in ? Если уж так хочется. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2013, 17:21:33 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee пишет: > Человеку нужны все документы за период, кроме документов менеджера > Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить > документы без номера. Процитированное - это "всё, кроме указанных" А получение результата указанием списка ID - это "только указанные". Как бы 2 большие разницы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 16:58:42 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Сисдба Мастеркеевич> Процитированное - это "всё, кроме указанных" > А получение результата указанием списка ID - это "только указанные". Это ты знаешь, человек. А программа ИИ не обладает, каким образом сформированы галочки в гриде она не знает (и даже тупо NOT IN не может сделать), посему ТС пошёл по пути меньшего сопротивления. Просто это неуместный плач Ярославны и проблемы не сервера, а тупых горе-пользователей и ленивого разработчика, который хочет переложить проблемы со своих плеч на сервер или кого бы то ни было. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 20:29:34 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамПросто это неуместный плач Ярославны и проблемы не сервера, а тупых горе-пользователей и ленивого разработчика, который хочет переложить проблемы со своих плеч на сервер или кого бы то ни было. Разработчик действительно ленив. Горе-пользователи действительно тупы. Проблемы сервера тут действительно нет :) Почему 256 джойнов? Потому что в байте 8 бит, а восемью битами можно закодировать только 256 значений. Это не ограничение сервера, это ограничение в архитектуре байта :) Тут dmitry недавно д'артаньяна вспоминал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 21:45:38 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Тут dmitry недавно д'артаньяна вспоминал :) В зеркало не пробовал посмотреться? Объясняю ещё раз, последний: 1. Ресурсы не бесконечны, ограничение всё равно будет. Если увеличить с 1500 до 3000 или даже 10000 - это не поможет и лишь уменьшит частоту втыкания в потолок. 2. Есть несколько и нормальных решений и воркэраундов, ты их то ли не видишь/не слышишь, то ли пытаешься проявить какую-то упёртость - с этим сразу в сад. 3. Твоё решение в данном конкретном случае ещё и невыгодно пользователям (с т.з. производительности) - я не проверял, но IN на 10000 в любом случае должен проиграть нормальному Where-фильтру, даже плохо индексированному. Разработчику (тебе) - да, удобно и выгодно, тупо по SelectedRows пробежался, IDшечки в запрос собрал (без параметров, кстати) и готово. Вместо того, чтобы наращивать функциональность фильтров и поисков. У тебя фильтр "в найденном" есть хотя бы, кстати? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 22:13:23 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
> невыгодно пользователям (с т.з. производительности) - > я не проверял, но IN на 10000 в любом случае должен > проиграть нормальному Where-фильтру, даже плохо индексированному Впрочем, нет, тут надо у ДЕ уточнять. Скорее всего, сервер просто соберёт битмап и пройдёт одним проходом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 22:16:02 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам, не будет одного прохода, будут тормоза :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 22:28:21 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
dimitr> не будет одного прохода, будут тормоза :-) А почему нельзя собрать всё за один (или пачками) проход? А сами записи уже потом извлекать и проверять. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 22:37:36 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Вернёмся к джойнам. Ты представляешь себе что имеет право существовать система из двух таблиц, в которой есть 500 справочников? Все справочники находятся в одной таблице... Наверняка представляешь. А можешь себе представить вторую таблицу, в которой 500 FK на таблицу справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)? А можешь себе представить, что нужно селектнуть запись из таблички с 500 FK, но не просто селектнуть, а с соответствующими значениями из таблицы справочника, причём не какие-то несколько полей, а все 500? Не можешь себе представить как у одной сущности может быть 500FK? Не было таких задач? Не представляешь кому может пригодиться сразу 500 значений? А если представляешь, то знаешь как обойти ограничение в 255 джойнов? Двумя запросами? :) А как это должна обходить какая-нибудь ORM-система с автогенерацией SQL? Никак? А кто сделал больше 255 FK, тот идиот, и задачи у него заведомо идиотские? :) А до скольки FK он ещё не идиот? :) До 255? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 23:17:44 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeА можешь себе представить вторую таблицу, в которой 500 FK на таблицу справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)? Я уверен, что Рустам на своём модераторском веку повидал достаточно идиотов, так что представить себе такого, который не знает как делается связь N:M, он, определённо, сумеет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 23:22:41 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeА можешь себе представить вторую таблицу, в которой 500 FK на таблицу справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)? Я уверен, что Рустам на своём модераторском веку повидал достаточно идиотов, так что представить себе такого, который не знает как делается связь N:M, он, определённо, сумеет. Я про ограничения FB. А ты про что? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 23:39:56 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeЯ про ограничения FB. А ты про что? :) А я про анацефала - проектировщика БД. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 23:51:15 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeА кто сделал больше 255 FK, тот идиотДа NickDeeи задачи у него заведомо идиотские?Нет Одно с другим никак не связано. Новость ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 00:08:32 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeЯ про ограничения FB. А ты про что? :) А я про анацефала - проектировщика БД. И какие цели ты перед собой ставишь, когда пишешь об этом? :) Какие насущные задачи пытаешься решить? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 00:10:36 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeИ какие цели ты перед собой ставишь, когда пишешь об этом? :) Какие насущные задачи пытаешься решить? :) Я пытаюсь донести всем посетителям этого форума, что проектировать БД так, как ты описываешь - не надо. Потому что "это делается совсем иначе". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 00:18:14 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Вернёмся к джойнам. Я бы предпочёл не возвращаться, потому что во-первых, с тобой никаких джойнов не обсуждал (в этом топике, по крайней мере). Во-вторых, как мембера, меня уже давно достали постоянные обсуждения (часто весьма немаленькие) 3-5 разных вопросов в одном топике )да ещё чужом). Этим не ты один страдаешь, кстати. Как модератор я вдвойне против таких обсуждений, да ещё не к месту, да ещё столь бесполензных (для ТС и форума в целом). > Ты представляешь Вполне. Я даже в одной таблице такое делал. Почитай про EAV, кстати - может быть, много нового для себя откроешь. Там тоже семиэтажные запросы, но как-то в ограничения всех основных СУБД укладывается. И никаких 250 джойнов. > А можешь себе представить вторую таблицу, в которой 500 FK на таблицу справочников > ... > Не можешь себе представить как у одной сущности может быть 500FK? Честно говоря - затрудняюсь. С ходу вспомнить не смог, как и представить, а все подобные случаи в моей практике были не одной сущностью, а несколькими (пусть и вложенными), что меняет ситуацию коренным образом. > А можешь себе представить, что нужно селектнуть запись > из таблички с 500 FK, но не просто селектнуть, а с > соответствующими значениями из таблицы справочника, > причём не какие-то несколько полей, а все 500? Не, не могу. Если это отчёт/экспорт данных, то даже при неправильной архитектуре это делается по другому, AFAIU. Если же это любая логика/обработка (не говоря уже о GUI), то накакать бы в рот тому разработчику, который будет всё это разом селектить, а не частями и по необходимости. Ты ещё скажи, что это у тебя вьюхой/ХПшкой вытаскивается. > А как это должна обходить какая-нибудь ORM-система с автогенерацией SQL? Вот про ORM тут надо думать, кстати. Хороший вопрос, хотя это не самый подходящий раздел для обсуждения. Надо полагать, что тупые ORMы (хоть самописные, хоть чужие готовые) такую кривую архитектуру не скушают - полезут вытаскивать всё одним запросом и подавятся. Надо освежить память и проверить ограничения EF и Hibernate на сей счёт. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 00:19:06 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
hvladNickDeeА кто сделал больше 255 FK, тот идиотДа И как нужно сделать, чтобы не быть идиотом? :) Вот у меня есть устройство состоящее из 500 видов деталей. Нужно заводить эти устройства в БД, и печатать (одно устройство на 1 печатный бланк). Есть удобная форма для ввода устройства в БД, на 500 комбобоксов. Есть грид, в котором в удобной форме выведены все 500 полей, с возможностью быстрой фильтрации списка полей (хотя с ограничением в 255 джойнов уже нужно поизвращаться чтобы вывести все). Есть печатная форма (в которой должен бы быть один селект, но ограничение в 255 джойнов не даёт возможности сделать один). Я тут вижу 1 главную таблицу с 500 FK, и справочники (это то, что естественным образом вытекает из условия задачи). А какую структуру предлагаешь ты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 00:27:01 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Вот у меня есть устройство состоящее из 500 видов деталей. > Есть удобная форма для ввода устройства в БД, на 500 комбобоксов. > Есть грид, в котором в удобной форме выведены все 500 полей OMG... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 00:32:49 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeВот у меня есть устройство состоящее из 500 видов деталей.500 видов деталей или из 500 штук деталей ? NickDeeЕсть удобная форма для ввода устройства в БД, на 500 комбобоксов .Не верю NickDeeЕсть грид, в котором в удобной форме выведены все 500 полей НЕ ВЕРЮ NickDeeА какую структуру предлагаешь ты?Я предлагаю тебе включить свой собственный мозг. Или перестать троллить, уже давно не смешно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 00:33:20 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Недописал: NickDee> Вот у меня есть устройство состоящее из 500 видов деталей. Подробнее расскажи, что за устройство и что за 500 линейных деталей. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 00:33:49 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамНедописал: NickDee> Вот у меня есть устройство состоящее из 500 видов деталей. Подробнее расскажи, что за устройство и что за 500 линейных деталей. Давай лучше на реально существующем примере расскажу, который работает у клиента... Есть дверь, которая в общем случае состоит из: Основная створка, дополнительная створка, фрамуга слева, фрамуга справа, фрамуга сверху. На каждой из этих сущностей (панелей), с каждой стороны (внутренней и наружней) может быть: - МДФ (материал, рисунок фрезеровки, тип фрезеровки, цвет ) - ЛДСП (материал) - Филёнка (рисунок) - Накладка (рисунок, цвет рисунка) - Перфорация (рисунок, цвет) - Ковка (рисунок, цвет) В скобках ссылки на справочники. Т.е. у нас имеется 12 ссылок на справочники. И это только для одной стороны панели. Панелей максимум 5 (две створки, три фрамуги) + 2 сторны, итого: 120 ссылок на справочники (12 * 5 * 2). Эти 120 ссылок НЕ лежат полями в таблице дверей. Они лежат в табличке "СторроныПанели"(там 12 FK). Потом есть табличка "Панели" с полями: "Выстота", "Ширина", "ВнешняяСторона ->", "ВнутренняяСторона ->" (ссылаются на табличку "СторроныПанели"). В табличке "Двери" есть два 5 полей: "ОсновнаяСтворка ->", "ДополнительнаяСтворка ->", "ЛеваяФрамуга ->", "ПраваяФрамуга ->", "ВерхняяФрамуга ->" (ссылаются на табличку "Панели") При сохранении заявки мы имеем одну запись в табличке "Двери", две записи в табличке "Панели", 10 записей в табличке "СторроныПанели". Если вытаскивать дверь одним селектом, например для редактирования или печати, то получается 120 джойнов. И это без учёта всех остальных характеристик двери (там ещё около 200 полей). Вот тут ( 15256277 ) я говорил про 175 джойнов и размер запроса в 45 килобайт. Вот этот запрос, для печати документа (вдохните поглубже :) ): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725. 726. 727. 728. 729. 730. 731. 732. 733. 734. 735. 736. Запрашиваются не все поля, а только те, которые нужны для печати одного единственного листа. SQL генерируется не ручками. Я вас так же уверяю, что форма ввода всего этого сделана вполне удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 19:14:44 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> В скобках ссылки на справочники. Т.е. у нас имеется 12 ссылок на справочники. NickDee> И это только для одной стороны панели. итого: 120 ссылок на справочники Во-первых, у меня такой арифметики не получилось, но не суть. Во-вторых, если сторон две, то логичнее было бы и выводить (и соответственно, получать и даже хранить, наверное) их в 2 строки, а не в одну шириной в 120 полей, тем более в гриде, отчете и т.д. В-третьих, сущностей у тебя таки не одна плоская, а много вложенных, которые ты хранишь как одну (я не имею в виду, что это неправильно, но тем не менее). Впрочем, я не разбираюсь в мебельной отрасли, вам там виднее. > то получается 120 джойнов. > И это без учёта всех остальных характеристик двери (там ещё около 200 полей). 120, не 500. И даже не 250. И я с трудом представляю, что там можно описать ещё в 200 атрибутах. Даже с учётом фурнитуры и пр. - это очень постараться такую кривизну налабать, ИМХО. > Вот тут (15256277) я говорил про 175 джойнов и размер запроса в 45 килобайт. > Вот этот запрос, для печати документа (вдохните поглубже :) ): Какой ужас. :) Хоть и не "ужас, ужас!" (с) Автосгенерён? > Я вас так же уверяю, что форма ввода всего этого сделана вполне удобно. В 500 комбобоксов? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 20:25:54 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамNickDee> В скобках ссылки на справочники. Т.е. у нас имеется 12 ссылок на справочники. NickDee> И это только для одной стороны панели. итого: 120 ссылок на справочники Во-первых, у меня такой арифметики не получилось, но не суть. 12 FK на одну сторону панели * 2 соторны * 5 панелей = 120 Гаджимурадов РустамВо-вторых, если сторон две, то логичнее было бы и выводить (и соответственно, получать и даже хранить, наверное) их в 2 строки, а не в одну шириной в 120 полей, тем более в гриде, отчете и т.д. Они не хранятся в 1 строку. Но селектятся одним запросом. Посмотри внимательней :) Гаджимурадов РустамВ-третьих, сущностей у тебя таки не одна плоская, а много вложенных, которые ты хранишь как одну (я не имею в виду, что это неправильно, но тем не менее). Сущность таки одна плоская, но хранится в нескольких таблицах :) Гаджимурадов Рустам> то получается 120 джойнов. > И это без учёта всех остальных характеристик двери (там ещё около 200 полей). 120, не 500. И даже не 250. И я с трудом представляю, что там можно описать ещё в 200 атрибутах. Даже с учётом фурнитуры и пр. - это очень постараться такую кривизну налабать, ИМХО. Дело не в кривизне, а в количестве атрибутов. Или ты считаешь что я буду вводить и обрабатывать неиспользуемые атрибуты? :) Гаджимурадов Рустам> Вот тут (15256277) я говорил про 175 джойнов и размер запроса в 45 килобайт. > Вот этот запрос, для печати документа (вдохните поглубже :) ): Какой ужас. :) Хоть и не "ужас, ужас!" (с) Автосгенерён? А что делать? Много полей, да. Гаджимурадов Рустам> Я вас так же уверяю, что форма ввода всего этого сделана вполне удобно. В 500 комбобоксов? В 146 :) Это опять же повезло что у дверей не так много параметров (т.е. в рамках ограничений ФБ) :) Но они имеют тенденцию добавляться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 21:52:09 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeГаджимурадов Рустам> Я вас так же уверяю, что форма ввода всего этого сделана вполне удобно. В 500 комбобоксов? В 146 :) Скриншот такого счастья можно посмотреть? Ну, для себя, чисто с целью общего развития интересуюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 21:54:51 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
miwaonlineNickDeeпропущено... В 146 :) Скриншот такого счастья можно посмотреть? Ну, для себя, чисто с целью общего развития интересуюсь. Всё на экран конечно не входит. Вот про створки. Если прокрутить ниже - там фурнитура и пр. Думаю подход понятен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 22:07:13 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Вот ещё один... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 22:12:09 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee, открой для себя иерархии. Жизнь изменится. И 100500 джойнов будут вызывать саркастический смех, как и у всех остальных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2013, 23:38:38 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> 12 FK на одну сторону панели * 2 соторны * 5 панелей = 120 Я не про то, что 12*2*5 = 120, с арифметикой у меня всё в порядке. Я про то, как и откуда эти 12, 2 и 5 берутся, хранятся и умножаются. Но, повторюсь, спорить не собираюсь, не моя область. > Они не хранятся в 1 строку. Но селектятся одним запросом. Так это твои проблемы. Я тоже могу кучу запросов придумать, которые не уложатся в ограничения, при том, что хранятся они вполне нормально. Селектить надо то, что нужно, а не всё, что можно. > Сущность таки одна плоская, но хранится в нескольких таблицах :) RTFM плоские/вложенные сущности. > Дело не в кривизне, а в количестве атрибутов. Или ты считаешь > что я буду вводить и обрабатывать неиспользуемые атрибуты? :) Я, честно говоря, уже не удивился бы и этому от тебя. Кривизна - в способе хранения, получения, вывода и обработки этих атрибутов. А сама дверь или что там у тебя ни в чём не виновата, конечно. Насчёт скриншотов - во-первых, скопипасть их в соотв. топик про интерфейсы, плиз. Во-вторых, лично меня очень не впечатлило, тем более такой длинной простыней - это 100% неудобно, что бы тебе (или ты сам себе) ни говорили пользователи. Открой для себя (и для них) иерархию - будь-то плоские вкладки, древовидный интерфейс или вложенные формы редактирования. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 00:05:59 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
hvladNickDee, открой для себя иерархии. Я знаю много иерархий. Ты про какие? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 02:26:03 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамОткрой для себя (и для них) иерархию - будь-то плоские вкладки, древовидный интерфейс или вложенные формы редактирования. Ну вот ты начинаешь учить :) Представь что я всё это уже сделал. От этого структура БД должна поменяться? Или я должен делать несколько селектов чтобы вытащить на клиента дверь? Нет. Один селект тут наиболее уместен и эффективен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 02:32:39 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустамтем более такой длинной простыней - это 100% неудобно А форум читать удобно? :) Все данные прокручиваются за три-четыре прикосновения к колесу мыши. Вообще я в жизни много разных интерфейсов делал. И с табами, и с деревьями. Тут вот решил с прокруткой сделать, и не прогадал. Кстати этот интерфейс полностью задизайнен встроенными в систему средствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 02:49:59 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Ну вот ты начинаешь учить :) А ты уже учёный? :) Не учись, если не хочешь, я не настаиваю. :) > Представь что я всё это уже сделал. От этого структура БД должна поменяться? > Или я должен делать несколько селектов чтобы вытащить на клиента дверь? Нет. Вполне возможно. Когда есть большая сущность, тем более сложная, состоящая из сущностей поменьше, то не всегда и даже в большинстве случаев её не факт, что стоит выводить и тем паче редактировать одним большим селектом и окном. В случае, если пользователь хочет поменять один небольшой атрибут - ему вряд ли нужны все остальные 200 атрибутов, тем более никак не связанные с его интересующим. Если ты хочешь поменять полики в машине - ты ведь не собираешься мотор разбирать, надеюсь? :) Представляю, что было бы, если на приёмё у стоматолога ещё и проктологию с урологией предлагали лечить за одно. А что? Сущность-то одна. > Один селект тут наиболее уместен и эффективен. Вот откуда такая уверенность про наиболее? :) Ты вообще какие-нибудь другие пробовал (пользователи видели) ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 02:57:06 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> А форум читать удобно? :) Когда как. Не всегда. Но форум - это во-первых, Web-интерфейс, а не GUI, что 2 большие разницы. Во-вторых, форум я именно читаю, а не редактирую всю эту простыню, редактирование делается проще. > Все данные прокручиваются за три-четыре прикосновения к колесу мыши. Прокрутка прокрутке рознь. Когда однородные элементы прокручиваются (эдиты и комбобоксы) - это одно, а когда в глазах рябит от адской смеси эдитов, комбобоксов, радиобаттонов и всё это перемежается картинками и панелями - это совсем другое дело. Хорошо хоть панели сворачиваются. Кстати, это как-нибудь настраивается/запоминается? > Тут вот решил с прокруткой сделать, и не прогадал. С чего ты решил, что не прогадал? Ты может и не прогадал, не стал париться. А вот пользователи ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 03:03:26 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамВот откуда такая уверенность про наиболее? :) Ты вообще какие-нибудь другие пробовал (пользователи видели) ? Я давно программы пишу, и всяко разно делал :) Есть у мнея в этой же программе и формы с табами. Там, где я посчитал это уместным :) Пользователи, если им что-то не удобно, обычно говорят. И я исправляю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 03:06:14 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамКстати, это как-нибудь настраивается/запоминается? Запоминается :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 03:07:28 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Есть у мнея в этой же программе и формы с табами. NickDee> Пользователи, если им что-то не удобно, обычно говорят Ну, если и пользователям пофиг, и тебе на них плевать - мне тем более, сдаюсь. NickDee> > Кстати, это как-нибудь настраивается/запоминается? > > Запоминается :) Аминь, хоть это нормально. А для разных типов/видов дверей всё равно все блоки выводятся/отображаются или адаптивно? Или разных типов/видов нет и это только внутри настраивается? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 03:15:26 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeПользователь в гриде выделял записи, и я их для групповой обработки вставлял в "where ID in (...)".Потому что использовать для этого временную таблицу у тебя не хватило... чего?вброшу немного: если у меня двухзвенка и лаг между клиентом и сервером 100 мс - как максимально быстро создать эту временную таблицу из хотя бы 10 тыс строк? у ТСа, я так понял, уже 2 варианта есть: - трхзвенка, где сервер приложений может принять от клиента тупо 10000*SizeOf(ID) бинарных данных и разбить их на ID для быстрой вставки в _локальную_ базу - собственные UDF, которые принимают аналогичный блоб (костыль сервера подпирается своим костылем) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 04:48:26 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамNickDee> Есть у мнея в этой же программе и формы с табами. NickDee> Пользователи, если им что-то не удобно, обычно говорят Ну, если и пользователям пофиг, и тебе на них плевать - мне тем более, сдаюсь. Если бы мне было плевать, я бы не смог писать для них. Гаджимурадов РустамNickDee> > Кстати, это как-нибудь настраивается/запоминается? > > Запоминается :) Аминь, хоть это нормально. А для разных типов/видов дверей всё равно все блоки выводятся/отображаются или адаптивно? Или разных типов/видов нет и это только внутри настраивается? У некоторых моделей нет фрамуг или дополнительной створки. В некоторых не может быть стеклопакета (например в противопожарной). Всё что не может быть, то прячется или дизаблится. Заказчик сам настраивает что у конкретной модели может быть, а что нет. Твоя совесть хоть немного удовлетворена? :) А то я стараюсь, отвечаю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 05:16:58 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
fd00chесли у меня двухзвенка и лаг между клиентом и сервером 100 мс - как максимально быстро создать эту временную таблицу из хотя бы 10 тыс строк? Ты в любом случае не сможешь её создать быстрее, чем пользователь тыкает в мышкой. А он это делает реже чем пять раз в секунду, так что делай запросы в отдельном потоке и задержек никто не заметит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 13:29:04 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDeeУ некоторых моделей нет фрамуг или дополнительной створки. В некоторых не может быть стеклопакета (например в противопожарной). Всё что не может быть, то прячется или дизаблится. Заказчик сам настраивает что у конкретной модели может быть, а что нет. А тебе не приходила в голову идея сделать для этого графический интерфейс? Чтобы заказчик редактировал нарисованную дверь и сразу видел как его изменения на неё повлияют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 13:32:19 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТы в любом случае не сможешь её создать быстрее, чем пользователь тыкает в мышкой. А он это делает реже чем пять раз в секунду, так что делай запросы в отдельном потоке и задержек никто не заметит.слишком натянутое предложение. мало того, что геморная реализация понадобится, так еще и невозможно делать групповые операции (выделить все, ничего, инвертировать или тупо выделить кучку строк, используя Shift/Ctrl и инвертировать чекбоксы, нажав на Space). ну и потом, не всегда ж юзер выбирает ID в списке по одному и не всегда полученные по этим ID строки юзер внимательно просматривает по одной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 13:42:18 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
fd00chмало того, что геморная реализация понадобится, так еще и невозможно делать групповые операции (выделить все, ничего, инвертировать или тупо выделить кучку строк, используя Shift/Ctrl и инвертировать чекбоксы, нажав на Space).Что там геморройного в реализации-то? Один старт потока, обложенного крит.секцией на каждое изменение статуса. И в чём проблема с групповыми операциями-то? Всего-то послать запрос "insert select" для "выделить всё" да "delete без условия" для "ничего". Инвертирование, конечно, похитрее будет, чтобы сделать его одним запросом нужно "merge delete", которое появилось только в тройке. С Ctrl строки всё равно выделяются по одной, Shift сам по себе геморроен с использовании при выделении большего количества чем видно на экране, так что проблем не создаст если наладить user-friendly feedback (например, расставлять чек-боксы в списке только после успешной отправки запроса - получится забавная анимация и прогресс-бар в одном флаконе). Если бы мне пришлось делать интерфейс стиля списков при латентной сети, я бы делал его именно так (в случае если просто часики на время выполнения операции не прокатят). fd00chне всегда ж юзер выбирает ID в списке по одному и не всегда полученные по этим ID строки юзер внимательно просматривает по одной. А как тогда он их выбирает и просматривает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 14:07:22 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЕсли бы мне пришлось делать интерфейс стиля списков при латентной сети, я бы делал его именно так (в случае если просто часики на время выполнения операции не прокатят).я лучше блобом массив ID буду передавать и сделаю udf для разворачивания этого блоба в таблицу, чем такой кудрявый метод Dimitry SibiryakovА как тогда он их выбирает и просматривает?он задает критерии в фильтре - получает число строк (список ID). думает от минуты до месяца и посылает команду на экспорт этих ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 14:42:27 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
fd00chон задает критерии в фильтре Так в чём проблема отослать на сервер один запрос с этими критериями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 14:51:30 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТак в чём проблема отослать на сервер один запрос с этими критериями?через минуту/месяц, пока юзер думает/платит, некоторые записи будут неактуальны, какие-то - добавлены. повторно тот же результат не получить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 14:55:24 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
fd00chчерез минуту/месяц, пока юзер думает/платит, некоторые записи будут неактуальны, какие-то - добавлены. повторно тот же результат не получить В транзакции уровня concurency - легко! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 15:01:59 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, и сколько мне ее держать открытой, если юзер не захочет этот кусок экспортировать, а запросит новый с другими критериями - пока сервер не перезагрузится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 15:08:46 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
fd00chи сколько мне ее держать открытой, если юзер не захочет этот кусок экспортировать, а запросит новый с другими критериями - пока сервер не перезагрузится? Пока список, из которого пользователь выбирает, не обновится. Если список как раз и формируется по критериям, то аккорат до "запросит новый с другими критериями". По-моему так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 16:24:41 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNickDeeУ некоторых моделей нет фрамуг или дополнительной створки. В некоторых не может быть стеклопакета (например в противопожарной). Всё что не может быть, то прячется или дизаблится. Заказчик сам настраивает что у конкретной модели может быть, а что нет. А тебе не приходила в голову идея сделать для этого графический интерфейс? Чтобы заказчик редактировал нарисованную дверь и сразу видел как его изменения на неё повлияют. Если бы это был коробочный продукт для дверных компаний, то я бы многое переделал. А так - это проект на заказ для одной компании, на два месяца работы и с ограниченным бюджетом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2013, 16:29:56 |
|
||
|
500 джойнов и IN
|
|||
|---|---|---|---|
|
#18+
NickDee> Всё что не может быть, то прячется или дизаблится. NickDee> Заказчик сам настраивает что у конкретной модели может быть, а что нет. Гут. NickDee> Твоя совесть хоть немного удовлетворена? :) А то я стараюсь, отвечаю :) Более или менее. :) Если ты и твои пользователи всем довольны - я рад за вас, так что забей. Просто они могли быть ещё довольнее. Это тот случай, когда игра (повышение удобства), судя по всему, стоит свеч - я бы улучшал. Но если всё уже работает и все уже к этому "длинному" интерфейсу привыкли - можно и оставить. Но изначально было сделано неправильно (неудобно), ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2013, 03:11:05 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1564057]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
179ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 180ms |
| total: | 453ms |

| 0 / 0 |
