powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему inner join по computed by полю быстрее, чем по исходным полям?
3 сообщений из 3, страница 1 из 1
Почему inner join по computed by полю быстрее, чем по исходным полям?
    #39105666
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Подскажите, пожалуйста, почему так происходит (а то может изначально неправильно что-то использую).

Есть таблица, данные в ней классифицируются по нескольким целым полям (идент базы, тип, сборник, отдел, таблица, позиция).
И вот когда надо сравнивать значения одних и тех же позиций разных баз, данные второй базы подключал так:
inner join NBRASC r2 on r2.IDNB=:ID2 and r2.KIND=r.KIND and r2.SBOR=r.SBOR and r2.OTD=r.OTD and r2.TABL=r.TABL and r2.POS=r.POS
И это было пипец как долго (от 30 до 50 секунд для разных баз собирало данные, порядка 40 тыс позиций (там еще join других таблиц идет), а всего в таблице около 350 тыс).
IBExpert при анализе чтения выдавал, что все читается индексировано ( R2 INDEX (IDX_NBRASC_TABL, IDX_NBRASC_POS))).
CREATE INDEX IDX_NBRASC_KIND ON NBRASC (IDNB, KIND);
CREATE INDEX IDX_NBRASC_TABL ON NBRASC (SBOR, OTD, TABL);
CREATE INDEX IDX_NBRASC_KS ON NBRASC (KIND, SBOR);
CREATE INDEX IDX_NBRASC_KV ON NBRASC (KIND, VISUAL);
CREATE INDEX IDX_NBRASC_POS ON NBRASC (POS, POSA);
(POSA не используется, всегда null)

В таблице дописал поле GLOBALPOS COMPUTED BY (KIND*(10000000000)+(SBOR*1000000000)+(OTD*1000000)+(TABL*1000)+POS)
Изменил на
inner join NBRASC r2 on r2.IDNB=:ID2 and r2.GLOBALPOS=r.GLOBALPOS
стало выполняться 3.5-3.9 секунды, в 10 раз быстрее!
Почему так? Ведь те же поля, даже еще и расчет добавляется.

Спасибо
...
Рейтинг: 0 / 0
Почему inner join по computed by полю быстрее, чем по исходным полям?
    #39105671
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillioподключал так:
Код: sql
1.
inner join NBRASC r2 on r2.IDNB=:ID2


У меня такое впечатление, что ты сам не понимаешь что делаешь и следует изучать SQL.
RTFM: http://ibase.ru/devinfo/joins.htm
http://ibase.ru/devinfo/dataaccesspaths.htm
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему inner join по computed by полю быстрее, чем по исходным полям?
    #39105699
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как это не понимаю, что делаю. Результат-то правильный. Не понимаю КАК делаю - это да, поэтому и спросил.
Ладно, будем читать, спасибо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему inner join по computed by полю быстрее, чем по исходным полям?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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