Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DataWindow: Filter or Retrieve? / 12 сообщений из 12, страница 1 из 1
17.07.2009, 17:00
    #36096174
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
DataWindow заполнет. Пользователь может устанавливать разные фильтры.
1. На каком этапе фильтр целесообразней заменить на новый Retrieve?
2. Есть ли ограничения на длину строки условия для фильтра?
...
Рейтинг: 0 / 0
17.07.2009, 17:55
    #36096307
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
AISDataWindow заполнет. Пользователь может устанавливать разные фильтры.
1. На каком этапе фильтр целесообразней заменить на новый Retrieve?
2. Есть ли ограничения на длину строки условия для фильтра?
1. Если записей в DataWindow не сотни тысяч, то целесообразности менять фильтр на Retrieve в общем случае нет.
2. Есть, большое.
...
Рейтинг: 0 / 0
17.07.2009, 22:02
    #36096571
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
Локшин МаркAISDataWindow заполнет. Пользователь может устанавливать разные фильтры.
1. На каком этапе фильтр целесообразней заменить на новый Retrieve?
2. Есть ли ограничения на длину строки условия для фильтра?
1. Если записей в DataWindow не сотни тысяч, то целесообразности менять фильтр на Retrieve в общем случае нет.
2. Есть, большое.
Т.е. в конструкции:
Код: plaintext
"(#" + ls_num_col + " IN (" + a_str + "))"
параметр a_str может быть "большой" (например, массив ввиде строки из 1000 значений)?
...
Рейтинг: 0 / 0
18.07.2009, 11:00
    #36096738
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
AISЛокшин МаркAISDataWindow заполнет. Пользователь может устанавливать разные фильтры.
1. На каком этапе фильтр целесообразней заменить на новый Retrieve?
2. Есть ли ограничения на длину строки условия для фильтра?
1. Если записей в DataWindow не сотни тысяч, то целесообразности менять фильтр на Retrieve в общем случае нет.
2. Есть, большое.
Т.е. в конструкции:
Код: plaintext
"(#" + ls_num_col + " IN (" + a_str + "))"
параметр a_str может быть "большой" (например, массив ввиде строки из 1000 значений)?
А Вам что-то мешает это проверить? Как это будет по скорости - не знаю. Например подобная конструкция на MS SQL (на 2000 и ниже - точно) когда в in массив из нескольких тысяч значений, приводит к достаточно сильным тормозам.
...
Рейтинг: 0 / 0
18.07.2009, 23:29
    #36097155
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
Локшин Марк ,
Спасибо за ответ. Буду скорее всего искать другие решения (конструкции строки фильтра), либо ограничивать пользователя в его экспериментах.
...
Рейтинг: 0 / 0
21.07.2009, 17:15
    #36101382
DataWindow: Filter or Retrieve?
И то и другое я давно включил в свои приложения в качестве стандартного сервиса любого dw
(местами ограничено по логическим соображениям)

Те пользователь может конструировать любое условие из колонок окна + дописывать
свой фрагмент where условия для sql или фильтра dw - что ему больше нравиться.

Результат по моим наблюдениям получился лучше для where в sql -
С фильтрами есть непонятные глюки - ну может я не все там доработал...

Что касается длины where условий - я их ограничил 8к - с диагностикой типа "Слишком сложно...", поскольку с SQL ANYWHERE старых версий (5.5 - 7) были преценденты жесткого падения сервера, когда user маркировал этак 30 000 записей справочника номенклатуры и
накладывал это условие на какой-нибудь товарный отчет.

По поводу эффективности списковых условий IN (1,2,3 ...) применительно к той же ASA
"несколько" по ключу оч хорошо
"много" даже по ключу оч хреново когда все одно full scan получается

поэтому почти везде заменил список на строку через запятую и locate(...)>0 в ней
Ничего лучше для передачи списковых аргуметов в отчеты и процедуры не нашел - это
самое быстрое оказалось - лучше IN, LIKE ...
...
Рейтинг: 0 / 0
22.07.2009, 01:06
    #36101968
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
Я, когда предполагается возможность выбора юзером нескольких значений для фильтра, вместо
Код: plaintext
where col in ( 1 ,  2 ,  3 )
записываю эти 1, 2, 3 в глобальную временную таблицу, каждое значение в отдельную запись, с указанием типа значения (обычно это имя таблицы-справочника откуда взято значение).
и делаю условие так:
Код: plaintext
where exists (select null from temp where value = col and name = 'coltype')
Этот кореллированный подзапрос хорошо оптимизируется большинством СУБД.
...
Рейтинг: 0 / 0
22.07.2009, 10:10
    #36102205
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
Anatoly MoskovskyЯ, когда предполагается возможность выбора юзером нескольких значений для фильтра, вместо
Код: plaintext
where col in ( 1 ,  2 ,  3 )
записываю эти 1, 2, 3 в глобальную временную таблицу, каждое значение в отдельную запись, с указанием типа значения (обычно это имя таблицы-справочника откуда взято значение).
и делаю условие так:
Код: plaintext
where exists (select null from temp where value = col and name = 'coltype')
Этот кореллированный подзапрос хорошо оптимизируется большинством СУБД.
Делаю примерно также, только почему в глобальную временную таблицу? Не помню как в Oracle, а в MS SQL она например видна всем сессиям.
...
Рейтинг: 0 / 0
22.07.2009, 12:01
    #36102548
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
Локшин МаркДелаю примерно также, только почему в глобальную временную таблицу? Не помню как в Oracle, а в MS SQL она например видна всем сессиям.
В Оракле - тоже.
Но данные-то у каждой сессии там свои.
Эта таблица у меня создается один раз вместе со всей остальной схемой, и приложению не надо каждый раз заботиться об этом, и появляется возможность оптимизации на уровне СУБД без изменения кода программы (индексы и прочее). Плюс в PB они видны как обычные таблицы и можно использовать в полной мере все инструменты (DW painter, Embedded SQL).

Ну и в Oracle нету других типов временных таблиц :)

Но например в ASA (с которым я тоже работаю) есть локальные, но я по вышеописанным причинам их не использую.
...
Рейтинг: 0 / 0
22.07.2009, 13:40
    #36102852
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
Anatoly MoskovskyНо данные-то у каждой сессии там свои.

А в MS SQL общие.
...
Рейтинг: 0 / 0
22.07.2009, 14:42
    #36103028
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
Локшин МаркAnatoly MoskovskyНо данные-то у каждой сессии там свои.

А в MS SQL общие.
А есть хотя-бы опция ON COMMIT DELETE ROWS ?
...
Рейтинг: 0 / 0
23.07.2009, 10:17
    #36104762
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataWindow: Filter or Retrieve?
Anatoly MoskovskyЛокшин МаркAnatoly MoskovskyНо данные-то у каждой сессии там свои.

А в MS SQL общие.
А есть хотя-бы опция ON COMMIT DELETE ROWS ?
Нет. Хотите персональные данные для каждой сессии - используйте только локальные временные таблицы.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DataWindow: Filter or Retrieve? / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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