powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос по индексам
11 сообщений из 11, страница 1 из 1
Вопрос по индексам
    #33243319
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, подскажите пожалуйста теоретический вопрос по оптимальному построению индексов в Informix
Есть три поля
flag char(1)
name_file char(12)
dt_registr (datetime year to second)
Во время работы программ производится отбор данных по различным условиям в разное время. Например
1. name_file = "tt010101.txt"
2. flag = "0" and name_file[1,2] = "rr"
3. flag = "0" and dt_registr < current and name_file[1,2] = "dd"
При том что поле flag определяет статус обработки строки и зачастую является первичным для поиска нужных строк, а поиск по name_file ведется (как показано во втором и в третьем условии) по части поля.
В связи с этим возник спор - как оптимально построить индексы для Informixa.
Либо создать три отдельных индекса на каждое из полей
1.flag 2.name_file 3.dt_registr
или создать три индекса, как по условию where
1.name_file 2.flag,name_file 3.flag,dt_registr,name_file
или достаточно двух индексов
1.name_file 2.flag,name_file,dt_registr
или
1.name_file 2.flag,dt_registr,name_file
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33243447
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flag,name_file,dt_registr - этот индекс будет наиболее оптимальным и использоваться в большинстве случаев (поиск по "flag", "flag,name_file", и "flag,name_file,dt_registr". Но, если у тебя все же будут запросы только с name_file или только dt_registr или name_file,dt_registr , то этот индекс использоваться не будет. Поэтому первый вариант с тремя отдельными индексами по одному ключу будет наиболее универсальным. Оптимальность - вещь очень условная, нужно как минимум, определиться с критериями. Ведь при интенсивной вставке модификация трех индексов будет более ресурсоемкой, чем модификация одного составного. Зато три индекса более универсальны. Если количество уникальных значений ключей будет мало, а общее кол-во строк будет большим, то отдельные индексы будут также менее производительны, чем один составной.
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33243600
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за разъяснения.
С прочими запросами вопрос не ставится. Речь идет только про те три запроса, которые я описал. Они составляют ~90% всех ежедневных запросов.
Про интенсивную вставку строк я сразу не подумал. Действительно надо брать в расчет и этот показатель.
Просто меня смущает немного тот факт, что поиск по полю name_file производится по первым 2 символам.
Будет ли в этом случае индекс flag,name_file,dt_registr работать эффективно, если выборка будет вестись по всем трем полям flag,name_file,dt_registr.
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33243805
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем я разобрался сам. Открыл и почитал талмуд. Сделал несколько экспериментов. Просмотрел set explain. И в принципе получил ответы на интересующие меня вопросы.
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33244368
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlevtinВ общем я разобрался сам. Открыл и почитал талмуд. Сделал несколько экспериментов. Просмотрел set explain. И в принципе получил ответы на интересующие меня вопросы.
Очень здорово. Таким людям и помогать приятно, не надо разжевывать, а только указать направление поиска и обдумывания.
Тем не менее, для тех, кто только читает (а таких 90%) мог бы вкратце и описать свои выводы и заключения. Ведь далеко не у каждого есть время читать талмуды и ставить эксперименты.
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33247687
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо. Попробую изложить свои рассуждения вслух. Я конечно не разбирался во всех деталях досконально, а только выяснил вопросы интересующие меня.
Исходя из моей ситуации - есть таблица в которую каждые 30 секунд накачиваются строки данных для последующей обработки. Первоначально полю flag присваивается значение "0". Соответсвенно это те строки которые подлежат обработке. После завершения обработки по результатам flag апдейтится в одно из значений ("1","2","9"). Соотвественно и поиск в обязательном порядке у меня должен вестись вначале по полю flag. Далее среди строк со значением 0 каждый из процессов выхватыват свои, производя поиск по первым 2 символам поля name_file. Ну и плюс ко всему иногда дополнительно в запросе участвует поле dt_registr и плюс поиск ведется целиком только по полю name_file.
Исходя из всего вышеизложенного я рассудил (и частично тесты подтвердили мои рассуждения) что три отдельных индекса на каждое из полей будет не самым эффективным хотя бы потому, что они будут отчасти излишними.
Поэтому остановился на варианте 2 индексов
1) flag,name_file,dt_registr
2) name_file
В принципе я и сразу хотел так поступить. Но меня смущал тот факт, что поиск по имени файла производится не целиком, а только по первым 2 символам. Когда идет поиск по первым двум полям, то старшая часть индекса отрабатывает как положенно - это я знал и раньше (даже если поиск по name_file ведется и не целиком по полю). При поиске же по всем трем полям (как показал set explain) вначале отрабатывает старшая часть индекса, состоящая из flag,name_file после чего из выбранных значений производится поиск по третей части индекса. Что меня полностью устраивает.
А порассуждав еще немного - было принято решение исключить dt_registr вообще из индекса ;-)) Так как его ефективность достаточно низка. Отобрав из таблицы записи по flag и name_file получается выборка состоящая менее чем из 100 строк (за очень редким исключением). Соответсвенно и строить индекс на оставшиеся строки практически не имеет смысла. Да и запрос с поиском по всем трем полям относительно редок.
Вот все мои рассуждения. Если я в чем то не прав. То на полноценное знание всех основ работы с базами данных я не претендую.
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33248346
Ilya Kulagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alevtin
Исходя из моей ситуации - есть таблица в которую каждые 30 секунд накачиваются строки данных для последующей обработки. Первоначально полю flag присваивается значение "0". Соответсвенно это те строки которые подлежат обработке. После завершения обработки по результатам flag апдейтится в одно из значений ("1","2","9").

Классическая идея состоит в том, что необработанные события хранятся в отдельной таблице, а архив обработанных сообщений - в другой. И индексы на них ставятся разные. И статистика по-разному пересобирается.
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33248400
Valentyn Pidburtnyi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если длина поля name_file большая, то индекс оптимальнее индекс построить только по первым 2-м символам поля name_file (если фильтровать таблицу всегда планируется именно по ним).
По крайней мере на эксперименте можно глянуть: есть ли в этом практический смысл.
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33250019
Ilya Kulagin
Классическая идея состоит в том, что необработанные события хранятся в отдельной таблице, а архив обработанных сообщений - в другой.
Вы бредите? В какой нормальной форме предлагается делить таблицу на две из-за значения аттрибута?
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33250778
Ilya Kulagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТупойТолстяк
Вы бредите? В какой нормальной форме предлагается делить таблицу на две из-за значения аттрибута?

Способ сделать две разные сущности (событие и ответ на него) записями одной таблицы, отличающимися атрибутом, тоже мысль спорная, и решение здесь в каждом случае может быть другим, на что я и обратил внимание некоторое время тому назад. Но в данном случае дело даже не в этом. Классическим способом увеличения производительности является денормализация схемы данных. Что, если не ошибаюсь, открытым текстом написано в книжке Performance Tuning от того же Информикса...
...
Рейтинг: 0 / 0
Вопрос по индексам
    #33257476
Ilya Kulagin
Способ сделать две разные сущности (событие и ответ на него) записями одной таблицы, отличающимися атрибутом, тоже мысль спорная, и решение

Откуда про две сущности? Не было такого. Наоборот:
Alevtin
1. name_file = "tt010101.txt"


Ilya Kulagin
Но в данном случае дело даже не в этом. Классическим способом увеличения производительности является денормализация схемы данных. Что, если не ошибаюсь, открытым текстом написано в книжке Performance Tuning от того же Информикса...Это не классический способ - это ПОСЛЕДНИЙ когда другие способы включая калмание с бубном не помогли. В данном случае не вижу препятствий для оптимизатора со статистикой. Читайте внимательней.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос по индексам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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