![]() |
|
Модераторы: Akella |
![]()
|
|
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Есть запрос в IbQuery, через Fields в него добавлены lookup поля. Всего возвращает около 15 000 записей. Работает довольно долго где-то 3-4 сек, может есть какая-нибудь возможность прогружать его постпенно? Тоесть пусть откроет видимые записи в DBGrid(их там 20 вроде), а остальные продолжает подгружать. Ну понятно, если пользователь будет сразу листать вниз пусть тупит, пока все не загрузит...не возбраняется
|
|||
|
||||
| chand0s |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 19.2.2007 Репутация: 1 Всего: 3 |
Вообще сам IBQuery не фетчит все записи. Фетч можно сделать либо как
или
То фетч не выполняется. Другое дело, что сам DBGrid может делать фетч. Попробуйте с другим Grid'ом или напишите свой на базе StringGrid. P.S. Я использую IBQuery + EhLib DB Grid - ничего автоматически не фетчится. Попробуйте. |
||||||||
|
|||||||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Фетч там делается для некоторых целей, но сейчас есть идеи как от него избавиться. Это конечно сэкономит кучу памяти и времени, но запрос все равно будет выполнятся медленно. Когда последний раз боролся с этим запросом, понял что без "order by" работает намного быстрее: 32ms против 1.5s. Причем пытался делать сортировку по первичному ключу все бестолку...так же медленно, не очень понятно почему? Из идей при первом запуске вообще отказаться от сортировки, не очень удобно но зато быстро
Всегда пользовался DbGrid, но хотел бы узнать в чем преимущества перед ним у EhLib DB Grid? |
|||
|
||||
| Bose |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: нет Всего: 51 |
Почитай здесь
Очень странно. Такое впечатление что сервер сам еле ворочается. |
||||
|
|||||
| chand0s |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 19.2.2007 Репутация: 1 Всего: 3 |
Показывай запрос и план.
|
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Запрос банальней не бывает
В таблице A примерно 15 000 записей, в B около 100.
Пытался делать через Left join, работает ещё медленне поэтому уж лучше так adr - типа varchar. Убирал его и ставил : order by A.i, по времени выйгрыша не получил...зато без него прямо прогресс на лицо. P.S> Почитал про EhLib, понравилось. А я эту фигню ручками прописывал обычно Это сообщение отредактировал(а) pavelv - 20.8.2007, 05:20 |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Наверно деньгу платить придётся -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| chand0s |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 19.2.2007 Репутация: 1 Всего: 3 |
План запроса!!! Для каких-либо выводов нужен план выполнения запроса. Ну, и версию сервера тоже неплохо услышать. |
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
План запроса, не понимаю что ты имеешь ввиду? Для каких выводов, IbQuery связан с DBGrid, в нем всё и отображается. Версия сервера: FireBird 1.5 SuperServer.
|
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: нет Всего: 51 |
Это относится к последней версии. Значит что будет работать, только если программа запущена из Delphi. А вот версия EhLib 3.6 - бесплатна для жителей бывшего СССР. Подробнее смотри здесь(в самом низу) |
|||
|
||||
| chand0s |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 19.2.2007 Репутация: 1 Всего: 3 |
Скачай IBExpert (около 17 Мб), подключи в нем свою базу и открой SQLEditor. Вставь в верхней половине окна свой запрос и нажми "Execute". В нижней половине окна появятся какие-то данные. |
|||
|
||||
| pavelv |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Да эксперт то стоит, как же без него родимого. Сортировка ведется по индексируемому полю:
Тот же запрос выполнил ещё раз(а то совсем долго делался) результат лучше, в дальнейшем такой и оставался:
Банально убираю из запроса "order by" результат:
Какие выводы из этого делают для оптимизации запроса не понимаю, если кто пояснит буду признателен. P.S> За EhLib спасибо, сейчас с этим разберусь ставлю библиотеку и буду менять большую часть компонентов в проекте на либовские Это сообщение отредактировал(а) pavelv - 22.8.2007, 06:51 |
||||||
|
|||||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: нет Всего: 51 |
pavelv, по-моему надо создать индекс для A.adr
хотя... это совет "не подумавши"(у меня от жары моск плавится) Это сообщение отредактировал(а) Bose - 22.8.2007, 17:51 |
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Индекс есть.
|
|||
|
||||
| chand0s |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 19.2.2007 Репутация: 1 Всего: 3 |
Покажи DDL таблицы А (вместе с созданием индексов), почему-то мне кажется что на поле A.i создано два индекса.
По твоему плану видно главное - последовательность действий сервера, а именно: 1) объединение потоков (данных из таблиц А и В) 2) сортировка того, что объединили Теперь понятно откуда задержки? P.S. Мне уже просто самому интересно стало, если не затруднит приведи полный код создания этих двух таблиц, всех индексов к ним и точный запрос на выборку. P.P.S. Про планы есть отличная статья, рекомендую. Это сообщение отредактировал(а) chand0s - 23.8.2007, 00:02 |
|||
|
||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |