powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / индексы по временным таблицам
18 сообщений из 18, страница 1 из 1
индексы по временным таблицам
    #34275649
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго вам всего.

есть вопрос
informix 7.30.UC10 под Linux RH ядро 2.4 , чанки по 2 гб
tempdb - 2 гб

очень часто (может быть всегда ?) из програмы нарисованной на 4gl после создания временной таблицы с индексами , если сразу же после создания не сделать update statistics по созданной таблице , то при выборке по этой временной таблице информикс индексы игнорирует. Может что в onconfig что не проставелно ?

Спасибо , Александр.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34275697
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aist-pskочень часто (может быть всегда ?) из програмы нарисованной на 4gl после создания временной таблицы с индексами , если сразу же после создания не сделать update statistics по созданной таблице , то при выборке по этой временной таблице информикс индексы игнорирует. Может что в onconfig что не проставелно ?Без статистики информикс не знает сколько в таблице строк, поэтому оптимизатор, считая что таблица пустая, принимает решение не использовать индекс. Если сравнить планы (точнее Estimated Cost/Rows) то это хорошо видно.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34275776
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Беру свои слова назад, оптимизатор не считает что она пустая, но все равно его исходные данные неверны:

без статистики:
Код: plaintext
1.
2.
3.
echo "select tabid, tabname from systables into temp temptest;
   create index ixx1 on temptest(tabid);
   select {+explain} * from temptest where tabid=99"|dbaccess sysmaster

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
QUERY:
------
select {+explain} * from temptest where tabid=99

DIRECTIVES FOLLOWED:
EXPLAIN
DIRECTIVES NOT FOLLOWED:

Estimated Cost:  7 
Estimated # of Rows Returned:  17 

  1) informix.temptest:  SEQUENTIAL SCAN 

        Filters: informix.temptest.tabid = 99

со статистикой:
Код: plaintext
1.
2.
3.
echo "select tabid, tabname from systables into temp temptest;
  create index ixx1 on temptest(tabid);
  update statistics low for table temptest;
  select {+explain} * from temptest where tabid=99"|dbaccess sysmaster
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
QUERY:
------
select {+explain} * from temptest where tabid=99


DIRECTIVES FOLLOWED:
EXPLAIN
DIRECTIVES NOT FOLLOWED:

Estimated Cost:  1 
Estimated # of Rows Returned:  1 

  1) informix.temptest:  INDEX PATH 

    (1) Index Keys: tabid   (Serial, fragments: ALL)
        Lower Index Filter: informix.temptest.tabid = 99
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276125
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так update статистики после создания временной таблицы - это правило и делать всегда ?
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276232
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aist-pskтак update статистики после создания временной таблицы - это правило и делать всегда ?Нет никаких правил.
Можно хинтами принудить ходить по индексу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
QUERY:
------
select {+explain,  index(temptest ixx1) } * from temptest where tabid=99


DIRECTIVES FOLLOWED:
EXPLAIN
INDEX ( temptest ixx1 )
DIRECTIVES NOT FOLLOWED:

Estimated Cost: 19
Estimated # of Rows Returned: 17

  1) informix.temptest:  INDEX PATH 

    (1) Index Keys: tabid   (Serial, fragments: ALL)
        Lower Index Filter: informix.temptest.tabid = 99
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276235
aist-pskтак update статистики после создания временной таблицы - это правило и делать всегда ?

Если Ваши временные таблицы таковы, что их нужно индексировать, то нужно и статистику обновлять, чтобы сервер эти индексы использовал - в этом использование временных таблиц ничем от постоянных не отличаются, оптимизатор один и тот же. Как минимум, статистику (UPDATE STATISTICS LOW, я имею ввиду). Возможно, и размер экстента стоит настроить, и распределение построить - это зависит...
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276246
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Спирин, и распределение построить - это зависит...Не получится, только dba может писать в таблицу sysdistrib.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276458
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как хинт для ms sql дать знаю , подскажите синтаксис как узаказать informix`су нужный индекс?
select * ... index...?
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276742
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисБез статистики информикс не знает сколько в таблице строк, поэтому оптимизатор, считая что таблица пустая, принимает решение не использовать индекс.
Информикс знает сколько в таблице строк, но он ничего не знает об индексах и распределении данных в столбцах, поэтому оптимизатор использует некоторые упрощенные правила. Например, если фильтр="константа", то оптимизатор считает, что этому условию будет удовлетворять ровно треть записей таблицы, т.е. избирательность такого фильтра (без знания распределения) =0.33
Именно поэтому в следующем примере Дениса видно, что "Estimated # of Rows Returned: 17", т.к. в таблице systables находилось примерно 50-53 записи.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276747
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aist-pskтак update статистики после создания временной таблицы - это правило и делать всегда ?
Если строите индексы и хотите, чтобы они эффективно использовались - то это правило.
Причем не обязательно делать high по всей таблице - вполне хватит medium или high только по ключевому столбцу.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276750
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис
Можно хинтами принудить ходить по индексу:
Код: plaintext
1.
2.
QUERY:
select {+explain,  index(temptest ixx1) } * from temptest where tabid=99

Насколько я помню, хинты появились только с версии 7.31, т.ч. вполне возможно, что в данной версии (7.30.UC10) их еще и нет.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34276828
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понял , спасибо
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34277261
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис Александр Спирин, и распределение построить - это зависит...Не получится, только dba может писать в таблицу sysdistrib.наврал, для временной таблицы можно.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
echo "connect to 'a' USER 'test';
  select tabid, tabname from systables into temp temptest;
  create index ixx1 on temptest(tabid);
  update statistics high for table temptest;
61 row(s) retrieved into temp table.
Index created.
Statistics updated.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34277328
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasilis....ровно треть записей таблицы, т.е. избирательность такого фильтра (без знания распределения) =0.33
Именно поэтому в следующем примере Дениса видно, что "Estimated # of Rows Returned: 17", т.к. в таблице systables находилось примерно 50-53 записи.
Не угадал :)

Код: plaintext
172 row(s) retrieved into temp table.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34278269
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasilis
если фильтр="константа", то оптимизатор считает, что этому условию будет удовлетворять ровно треть записей таблицы, т.е. избирательность такого фильтра (без знания распределения) =0.33
Именно поэтому в следующем примере Дениса видно, что "Estimated # of Rows Returned: 17", т.к. в таблице systables находилось примерно 50-53 записи.
Второй раз ВАУ за сегодня...
Не подскажете где можно увидеть в доке (а не проверить на практике) эту информацию: "оптимизатор считает, что этому условию будет удовлетворять ровно треть записей таблицы"? Может, конечно, протупил при поиске - но нигде пока не встретил ничего подобного...
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34278323
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис vasilis....ровно треть записей таблицы, т.е. избирательность такого фильтра (без знания распределения) =0.33
Именно поэтому в следующем примере Дениса видно, что "Estimated # of Rows Returned: 17", т.к. в таблице systables находилось примерно 50-53 записи.
Не угадал :)
Код: plaintext
172 row(s) retrieved into temp table.

А я не угадывал, а вспоминал, причем неправильно вспомнил. Сейчас полез, посмотрел, что 0.33 это для > (больше) или < (меньше) "выражения", а для равенства = 0.1, так что все верно - 17 строк и есть одна десятая от 172.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34278378
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойНе подскажете где можно увидеть в доке (а не проверить на практике) эту информацию:... Может, конечно, протупил при поиске - но нигде пока не встретил ничего подобного...
Не подскажу, так как в официальной документации я тоже такого не видел, но в материалах учебного курса "Managing and optimizing IDS.2000" в разделе "The cost-based query optimizer" есть таблица присвоения селективности фильтра (filter selectivity assignments), из которой я и брал данные цифры. Наверняка эти значения довольно условны и могут изменяться в версиях.
...
Рейтинг: 0 / 0
индексы по временным таблицам
    #34285409
Журавлев Денис Александр Спирин, и распределение построить - это зависит...Не получится, только dba может писать в таблицу sysdistrib.

И статистика, и распределения для временных таблиц не хранятся в таблицах системного каталога. Строить распределение для временных таблиц, не будучи DBA, можно.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / индексы по временным таблицам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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