powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Имеет ли смысл составной индекс ...
6 сообщений из 56, страница 3 из 3
Имеет ли смысл составной индекс ...
    #38065219
Tesla13Яковлев ПавелЕсть предложение не изучать предмет теоретическиЕсть предложение не давать "предложений" если это не ответ по теме, предлагая то, что сразу сказано сделать невозможно (именно на этот случай сказано).
Да и вообще смысл влезать не свою область? Шофер не должен быть механиком, но способен определить/поднять проблему если вместо второй скорости включается задняя. И сказать механику... если тот в этом "не видит проблемы, и - 'до тебя машинка ездила, и никто не жаловался'", то сменить механика.

Получение данных из sysdistrib (а я предлагал только получение, а с их анализом тут бы могли помочь) позволило бы понять сколько записей в таблице для какого кода и на основании это доходчивее объяснить вам почему оптимизатор так себя ведёт.

Так же вы путаете от непонимания sysmaster (отдельная системная база данных про которую вы писали что у вас нет доступа) и sysdistrib - таблицу существующую в каждой базе (и ваша не исключение) и помогающую планировать запрос.

Tesla13Выбегаллону если у вас 40M записей с кодом 7, и по 10 записей where a=5, 6, 127, то естественно, что разница будет принципиальная.
Во втором случае Информикс вообще откажется использовать индекс, будет сплошным перебором ковырять.
Нда, и это прямо под ответом на сообщение от Журавлева Дениса...
Начинаю понимать, что был глуп... это надо же, спрашивать в таком месте, где обитают такие... умные люди.
Самокритика, да ещё так точно описывающая ситуацию, всегда приветствуется в этом форме.

СУБД Informix такова не умным людям с ней тяжело. А тот, кто истерит вместо сотрудничества с людьми которые тратят своё личное время в попытке помочь, действительно рядом с ними будет ощущать себя глупым.
...
Рейтинг: 0 / 0
Имеет ли смысл составной индекс ...
    #38065439
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойTesla, давайте поступим проще, дабы не отклоняться от темы.

1) Вопрос: могли ли регулярно или нерегулярно тормозить запросы с "WHERE ext = ... и id = ..." при наличии только индексов (ext) и (id)?

Ответ: могли.

Основной вариант:
выбор оптимизатором Informix неэффективного плана запроса (индексов).

[

Запасной вариант: неравномерное распределение ext И id. Если у вас на таблицу в 40 миллионов записей 39 миллионов содержат ext=0 и другие 39 миллионов содержат id = -1, то индексы на ext и id вам мало помогут при запросе select * where ext = 0 and id = -1
...
Рейтинг: 0 / 0
Имеет ли смысл составной индекс ...
    #38065680
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВыбегаллоЗапасной вариант: неравномерное распределение ext И id. Если у вас на таблицу в 40 миллионов записей 39 миллионов содержат ext=0 и другие 39 миллионов содержат id = -1, то индексы на ext и id вам мало помогут при запросе select * where ext = 0 and id = -1
В первом посте ТС давал описание природы данных: ext - "почти уникален", id - всего 1 500 уникальных значений.
Поэтому этот вариант я не рассматривал.
...
Рейтинг: 0 / 0
Имеет ли смысл составной индекс ...
    #38065684
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойВ первом посте ТС давал описание природы данных: ext - "почти уникален", id - всего 1 500 уникальных значений.
Поэтому этот вариант я не рассматривал.
Кстати, ещё вопрос при таком распределении, какой индекс эффективнее (ext, id) или (id, ext).
Но разница уж точно не должна быть ощутимее, чем на десяток процентов...
...
Рейтинг: 0 / 0
Имеет ли смысл составной индекс ...
    #38093111
Tesla13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев ДенисВ зависимости от того что вы хотите, все строки или первые 100, эффективные планы будут разные.Я вроде нигде ни разу даже не намекал на "все строки", их в этой таблице (размер указывал) просто нереально вытащить, даже с супер оптимальным планом.
Всегда было про первые 100/последние 100 при указании DESC, с моей стороны по крайней мере.

Но да ладно. "Поднял" ветку по другому поводу, сообщить, что дело наконец сдвинулось с мертвой точки. т.к. глюки пошли и у других, в более очевидной форме.
Так "поймали" ситуацию когда выбирается по условию (время, юзер, и т.д.) значение ключа для последующего изменения записи (настроено так, что изменять можно только по ключу в where), а последующий апдейт с id=xxx говорит - запись не найдена, т.е. в выборке с другим условием значение ключа есть, а операции с этим значением не работают...), подозреваю, что все те -1 в ключе, что "задваивали" на деле были другими значениями... и где то с ними "разрыв шаблона", типа в индексе -1, в базе реальное значение, или наоборот...

Принято решение на праздниках (минимум активности предположительно) остановить базу(/предприятие) на 3 дня на "технические работы", пере индексацию и т.д. (не знаю, что они там вкладывают за смысл в фразу "технические работы", я с ними, как и тут похоже, на разных языках общаюсь).
... Тут надо бы написать "надеюсь на лучшее", типа исправят, и сделаю как надо, но мне уже по фигу, т.к. пока шла "война" нашел другую работу, после праздников буду увольняться ...
...
Рейтинг: 0 / 0
Имеет ли смысл составной индекс ...
    #38137265
DrGonzo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tesla13В таблице есть 2 индекса (вообще то больше, но там все ясно)
create index ext_id on trans (ext, id) и create index id on trans (id)

В их необходимости сомнений нет, в смысле поиски идут по обоим, сомнение в "довеске" id в первом. Т.е. насколько этот "довесок" используется информиксом?
Не проще ли обойтись простыми
create index ext on trans (ext) и create index id on trans (id)

Запросы используют насколько могу судить все варианты в примерно одинаковой мере...
т.е. "WHERE ext = ... AND id = ..." (примерно в 30% случаев) и "WHERE ext = ..." (примерно в 30% случаев) и "WHERE id = ..." (примерно в 30% случаев, хотя тут чаще не "чистое условие", а в паре с временем например, "чистое" по количеству возвращенного не пройдет)

Причем:
поле ext строка "с претензией на уникальность" т.е. там и гуиды в строках, и свои от времени например рассчитанные значения... но все таки не уникальные (а каких то значений может быть много).
поле id имеет всего примерно 1500 (int-овых) значений, что на 50-ти миллионную таблицу не так уж много для индекса.

Ну, вот, в MSSQL я бы сделал 2 простых... он прекрасно работает и при "спаривании" в условии разных индексов. А в информиксе? Мне говорят "это для быстродействия" (тех самых первых 30% запросов), и типа когда он был не составным, а обычным (как считаю правильнее), все "очень тормозило"... НО!!! Меня не покидают смутные сомнения, что проблема в чем то другом.
Очень уж похоже на -
p.s. "Ноги" некоторым образом "растут" отсюда , если кому интересно.
но тут без возможности даже проверить.

Всю тему не читал, но хочу вставить свои пять копеек на тему, почему индекс create index ext_id on trans (ext, id) может быть лучше / быстрее, чем create index ext on trans (ext) .

Как уже отметили, в поле ext может быть много дубликатов. Для индекса это будет означать, что на уровне листьев будет запись типа [ключ,rowid1,rowid2 ... rowidn]. При удалении или вставке, хождение по такому списку и его модификация будут более ресурсоемкими, чем если в ситуации [ключ,rowid]. Т.к. во втором случае соотв. ключ просто будет помечен, как удаленный и будет исключен из структуры индекса позже в процессе работы btree cleaner, а в первом будет foreground write.

Замена индекса на составной, с дополнительным полем сделает набор ключей в индексе более дисперсным, а следовательно количество/длину упомянутых выше списков rowid'ов меньше/короче.
...
Рейтинг: 0 / 0
6 сообщений из 56, страница 3 из 3
Форумы / Informix [игнор отключен] [закрыт для гостей] / Имеет ли смысл составной индекс ...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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