|
Почему inner join по computed by полю быстрее, чем по исходным полям?
|
|||
---|---|---|---|
#18+
Добрый день! Подскажите, пожалуйста, почему так происходит (а то может изначально неправильно что-то использую). Есть таблица, данные в ней классифицируются по нескольким целым полям (идент базы, тип, сборник, отдел, таблица, позиция). И вот когда надо сравнивать значения одних и тех же позиций разных баз, данные второй базы подключал так: 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 раз быстрее! Почему так? Ведь те же поля, даже еще и расчет добавляется. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 15:06 |
|
Почему inner join по computed by полю быстрее, чем по исходным полям?
|
|||
---|---|---|---|
#18+
Devillioподключал так: Код: sql 1.
У меня такое впечатление, что ты сам не понимаешь что делаешь и следует изучать SQL. RTFM: http://ibase.ru/devinfo/joins.htm http://ibase.ru/devinfo/dataaccesspaths.htm Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 15:14 |
|
|
start [/forum/topic.php?fid=40&msg=39105699&tid=1562506]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 151ms |
0 / 0 |