![]() |
|
Модераторы: Akella |
![]()
|
|
| deviantik |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
Firebird 2.1, через JDBC, использую embedded.
Подскажите пожалуйста я полный чайник. Структура БД:
и вот такой запрос в программе выполняется очень долго в чем может быть проблема?
Модератор: зачем такие длинные строки Это сообщение отредактировал(а) Akella - 5.9.2010, 07:50 |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 3 Всего: 454 |
Попробуй все условия убрать в подзапрос.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 20 Всего: 329 |
Попробуй создать индекс на каждое отдельное поле, которое участвует в Where.
И попробуй создать составные индексы, которые участвуют в between Добавлено через 2 минуты и 3 секунды Торможения также могут проявляться из-за того, что используешь IN. Торможения также могут проявляться из-за огромного количества записей. А также не забывай пересчитывать статистику индексов, если удаляешь, изменяешь или добавляешь большое количество записей. |
|||
|
||||
| deviantik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
а что нужно использовать вместо in? множество проверок с OR ?
Это сообщение отредактировал(а) deviantik - 5.9.2010, 11:57 |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
deviantik, не увидел нормальных индексов
p.state в отдельный справочник, а в таблице ссылка (по id int), тогда конструкция in сработает лучше. Нужно 3 отдельных индекса по p.receive, p.transfer, p.realization, p.lastmodif один составной по ним не нужен, т.к. используется "or" Не совсем понятно для чего такое условие в where (много or по разным датам), может подумать над логикой?
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| okkonst |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.9.2010 Где: Воронеж Репутация: нет Всего: 1 |
Ну, конкретные советы уже дали, я хочу кинуть свои 3 копейки: в IBExpert есть отличная функциональность - поглядеть количество индексированных и не индексированных чтений из таблиц запроса. Эта информация в данном случае является исчерпывающей для анализа: не индексированные чтения заменить на индексированные (проиндексировав соответствующие поля). Но опять же, с умом, думая о смысле индекса по конкретному полю (сильно ли облегчил бы "каталог" информации в этом поле поиск конкретной записи для тебя? Или все равно пришлось бы ручками перебирать половину записей?). Далее, постараться уменьшить число проходов по таблицам, пусть даже индексированных. Например, в некой таблице 500 записей, а статистика запроса показывает 1500 индексированных чтений из нее. Это означает, что выборка из такой таблицы была произведена многократно, например, из-за того, что она используется в подзапросе. Зачастую, можно изменить логику запроса, переписать его так, чтобы данные выбирались 1 раз. |
|||
|
||||
![]()
|
| Правила форума "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. |