Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Чудесная фраза! :) Журавлев Денис почти никогда не используютсяВыделено мной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 11:32 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевЧудесная фраза! :) Журавлев Денис почти никогда не используютсяВыделено мной.что вас смущает? Надо было написать "Индексы на таблицах размером меньше одной страницы редко использются"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 12:32 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев Денис Евгений ФадеевЧудесная фраза! :) Журавлев Денис почти никогда не используютсяВыделено мной.что вас смущает? Надо было написать "Индексы на таблицы размером меньше одной страницы редко использются"?Я так понимаю что речь шла об использовании индексов оптимизатором? Меня всегда смущает, когда про какой-то механизм говорят "Он почти никогда так не делает"... - Что делате ваш автомобиль при нажатии на педаль тормоза? - Как правило - тормозит. И почти никогда при этом он не начинает разгоняться! Почти никогда... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 12:56 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевЯ так понимаю что речь шла об использовании индексов оптимизатором? Если в запросе будет присутствовать таблица, размер которой <=2(4,,n)кб (размер блока), оптимизатор будет рассматривать для каждого такого запроса множество планов, в этом множестве будут планы, в которых будут использоваться индексы на эту крохотную таблицу, но в подавляющем большинстве случаев эти планы будут "дороже" чем планы с seq scan этой таблицы, поэтому при выполнении запроса для доступа к данным таблицы -- индексы использоваться не будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 13:58 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев Денис Тан А это зависит от распределения данных. И если согласно распределению индекс не эффективен, тогда он не будет использоватся оптимизатором. Индексы на таблицы размером меньше одной страницы почти никогда не используются, хотя можно попробовать что будет если все поля таблицы в индекс включить. Это справочник с двумя (или пятью) строками будет меньше страницы. А подчиненная таблица может быть очень даже большой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 14:28 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
vasilisК тому же и оптимизатор не всегда такой умный, как хотелось бы.Собственно исходно топик и появился из-за этого. Оптимизатор, конечно, умный, но я предпочитаю иметь над ним контроль :)) vasilisНо все же, если сравнивать в общем, то я бы все таки оставил принудительное построение индексов, т.к. это намного лучше, чем когда люди вообще не строят индексы на ключах (видел пару раз такие промышленные БД на Оракле, когда у заказчика через несколько месяцев эксплуатации "вдруг" все начинало жутко тормозить, а у разработчика на малых объемах летало).А вот здесь я не соглашусь (впрочем это сугубо субъективно), так как это вопрос ориентации инструмента. Если он ориентирован на специалистов - то любая автоматичность должна быть настраиваемой. Мне ближе более строгий подход. Забыли/не знали что нужно построить индексы? Не лезьте разрабатывать промышленые системы! А то наберут студентов по объявлению, а потом почтенные (как в Вашем случае) приходят в ужас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 14:35 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
АнатоЛой vasilisПример такого "мешающего" индекса - автоиндекс на ключ "пол", где всего два значения М и Ж. Надо доказывать неэффективность такого индекса ? А можно? Неужели на самом деле нужно доказывать неэффективность индекса всего с двумя значениями на таблице в миллионы строк ? Не верю, что вы ничего не читали об уникальности, дублировании значений, распределении данных и структуре индексного дерева. Напомню только, что в таком индексе всего два (2!!) элемента и все ссылки на строки таблицы хранятся не ввиде би-дерева (b-tree), которое эффективно для быстрого поиска, а ввиде обычного огромного массива ссылок, (точнее двух массивов в нашем случае) и для поиска нужного элемента (например, для удаления или замены) нужно "бегать" (сканировать) не по B-дереву, а по огромному массиву, по моему, даже не отсортированному. С другой стороны, даже если забыть об этой проблеме, а просто взять индекс, через который выбирается половина всех значений таблицы, то, как минимум, он будет бесполезен, с точки зрения производительности, с лишними затратами на пространство и обслуживание. И давайте не возвращаться к теме оптимизатора, "который сам решит" - увы, не всегда он такой умный и тому была масса примеров в прошлом (сейчас я такими вопросами уже не занимаюсь). И специально делал сбор статистики для некоторых версий IDS, в которых статистика по мелким таблицам просто "убивалась", чтобы "вумный оптимизатор" ничего о них не знал и просто сканил их без индексов. Производительность поднималась в порядки (с часа-двух до 5-10 минут), конечно это не на примитивных запросах (страниц на несколько текста и пара десятков таблиц), да еще и построенных всякими серверами приложений. Да и директив тогда не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 20:51 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Тан vasilis Пример такого "мешающего" индекса - автоиндекс на ключ "пол", где всего два значения М и Ж. Надо доказывать неэффективность такого индекса ? А это зависит от распределения данных. Каким образом неэффективность зависит для конкретного примера ? Миллион значение М и миллион Ж и больше ничего. ТанИ если согласно распределению индекс не эффективен, тогда он не будет использоватся оптимизатором. Тогда зачем он вообще нужен для конкретного случая использования по селекту ? Впрочем, об этом оптимизаторе я уже достаточно сказал. Да, вспомнилась известная фраза из "Двенадцати стульев" - "Дворник не был близорук, но к очкам привык и носил их с удовольствием" :) ТанЗато без индекса большой проблемой будут попытки изменить значения ключа в главной таблице. Или записи из нее удалить. Это уже о другом. Не надо уходить в сторону и рассказывать о том, какие замечательные свойства вообще имеют индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 21:04 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев Денис Евгений ФадеевЯ так понимаю что речь шла об использовании индексов оптимизатором? Если в запросе будет присутствовать таблица, размер которой <=2(4,,n)кб (размер блока), оптимизатор будет рассматривать для каждого такого запроса множество планов, в этом множестве будут планы, в которых будут использоваться индексы на эту крохотную таблицу, но в подавляющем большинстве случаев эти планы будут "дороже" чем планы с seq scan этой таблицы, поэтому при выполнении запроса для доступа к данным таблицы -- индексы использоваться не будут. Я ранее уже рассказал, что были реальные примеры, когда такие индексы использовались и сильно мешали. К тому же, если бы таких индексов не было. то оптимизатору надо было бы рассматривать меньше вариантов, а в случае, когда количество таблиц в соединении превышает 6-8 штук, то время "размышления" оптимизатора может сильно увеличиваться, т.к. число вариантов растет не слабо. Не зря Информикс ввел Optimization low и рекомендует применять его на соединениях, где 5 таблиц и более ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 21:13 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений Фадеев vasilisНо все же, если сравнивать в общем, то я бы все таки оставил принудительное построение индексов, т.к. это намного лучше, чем когда люди вообще не строят индексы на ключах (видел пару раз такие промышленные БД на Оракле, когда у заказчика через несколько месяцев эксплуатации "вдруг" все начинало жутко тормозить, а у разработчика на малых объемах летало).А вот здесь я не соглашусь (впрочем это сугубо субъективно), так как это вопрос ориентации инструмента. Если он ориентирован на специалистов - то любая автоматичность должна быть настраиваемой. Мне ближе более строгий подход. ююю Наверное, не более строгий (вот такой то он как раз у Информикс), а более гибкий, говоря вашими же словами "любая автоматичность должна быть настраиваемой". Тут трудно не согласиться. Лучше бы были реализованы обе стратегии с возможностью их выбора. Причем это верно для многих случаев. Например, если место в dbspace заканчивается, то стоит его автоматически расширять или нет ? Зависит от ситуации и психологии админа. В разных СУБД реализовано по разному, но мне хотелось бы _выбирать_ нужную стратегию. Но тогда Информикс превратился бы в Оракл и уже не был бы таким простым и маленьким. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 21:23 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
vasilis Тан vasilis Пример такого "мешающего" индекса - автоиндекс на ключ "пол", где всего два значения М и Ж. Надо доказывать неэффективность такого индекса ? А это зависит от распределения данных. Каким образом неэффективность зависит для конкретного примера ? Миллион значение М и миллион Ж и больше ничего. а если у нас в таблице миллион М и тысяча Ж? vasilis ТанЗато без индекса большой проблемой будут попытки изменить значения ключа в главной таблице. Или записи из нее удалить. Это уже о другом. Не надо уходить в сторону и рассказывать о том, какие замечательные свойства вообще имеют индексы. это не о другом. У нас тема - индексы на ключи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 09:12 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Тан vasilis Тан vasilis Пример такого "мешающего" индекса - автоиндекс на ключ "пол", где всего два значения М и Ж. Надо доказывать неэффективность такого индекса ? А это зависит от распределения данных. Каким образом неэффективность зависит для конкретного примера ? Миллион значение М и миллион Ж и больше ничего. а если у нас в таблице миллион М и тысяча Ж? А если миллион Ж и ни одного М ? А если... К чему эти вопросы ? Не станете же вы утверждать, что в вашем случае распределения на среднестатистических запросах эффективность индекса сильно возрастет ? Я же не убеждаю вас не использовать индексы, потому что может быть всего один частый запрос в прикладной системе, ради которого индекс и строится, а показываю, что индексы МОГУТ БЫТЬ НЕЭФФЕКТИВНЫМИ. Есть способы (возможности) увеличивать эффективность (скорость и полезность) таких индексов. Например, для данного случая обычно с указателем пола вытягивается и год рождения, поэтому можно сделать составной индекс год_рождения, пол и т.о. увеличить скорость работы индекса (как при поиске, так и при изменениях). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2006, 18:27 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
vasilisЯ же не убеждаю вас не использовать индексы, потому что может быть всего один частый запрос в прикладной системе, ради которого индекс и строится, а показываю, что индексы МОГУТ БЫТЬ НЕЭФФЕКТИВНЫМИ. Есть способы (возможности) увеличивать эффективность (скорость и полезность) таких индексов. Например, для данного случая обычно с указателем пола вытягивается и год рождения, поэтому можно сделать составной индекс год_рождения, пол и т.о. увеличить скорость работы индекса (как при поиске, так и при изменениях). мы вообще про разные вещи говорим Если в таблице есть внешний ключ: 1. индекс на этот ключ нужен для проверки целостности 2. запросам он мешать не будет, а иногда (в зависимости от распределения значений) может оказаться и полезным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 11:18 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Давайте я еще раз влезу... ТанЕсли в таблице есть внешний ключ: 1. индекс на этот ключ нужен для проверки целостностиИндекс не нужен для проверки целостности. Он может ее ускорить (а может и замедлить). Но необходимости в нем нет. Тан2. запросам он мешать не будет, а иногда (в зависимости от распределения значений) может оказаться и полезнымЭто будет зависеть от того, как работает оптимизатор (и от качества статистики, но это, в общем, туда же). Вы привели идеальный случай. Реальность бывает такой не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 11:28 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевДавайте я еще раз влезу... Индекс не нужен для проверки целостности. Он может ее ускорить (а может и замедлить). Но необходимости в нем нет. О том и речь, что у информикса жестко прошитый алгоритм проверки целостности и индекс всегда используется. Это конечно плюс не надо строить (оптимизировать) запрос (искать в кэше планов и т.д.), но минус то что надо иметь именно этот индекс по (fk), и плевать что есть например (fk, f10), избыточность некоторая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 11:39 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисО том и речь, что у информикса жестко прошитый алгоритм проверки целостности и индекс всегда используется . Это конечно плюс не надо строить (оптимизировать) запрос (искать в кэше планов и т.д.), но минус то что надо иметь именно этот индекс по (fk), и плевать что есть например (fk, f10), избыточность некоторая.Стоп! Если дело обстоит именно так (выделено мной), то это (в случае "плохого" индекса) очень серьезная проблема! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 11:42 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевЕсли дело обстоит именно так (выделено мной), то это (в случае "плохого" индекса) Бред по кругу. Что такое плохой индекс? Давай уже примеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 11:44 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев Денис Евгений ФадеевЕсли дело обстоит именно так (выделено мной), то это (в случае "плохого" индекса) Бред по кругу. Что такое плохой индекс? Давай уже примеры.Да выше все есть! :) Проще некуда: есть длинная таблица (скажем 10-100 млн. строк). В ней есть внешний ключ на короткий справочник (скажем 2-20 строк). Соответственно избирательность индекса по внешнему ключу - никакая. Использование такого индекса - гарантия тормозов. Впрочем написав я понял что туплю :)) Понятно что при проверке целостности он будет использовать первичный (или уникальный ключ, а значит и индекс) и это всегда хорошо. Я про соединения. В общем действительно не о том спорил :)) Хотя вопрос про управление индекснами остался открытым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 11:52 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевЕсли дело обстоит именно так (выделено мной), то это (в случае "плохого" индекса) очень серьезная проблема!кстати выделять надо было жестко прошитый алгоритм проверки целостности и индекс всегда используется , а то опять у нас в стране секса нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 11:53 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений Фадеев Впрочем написав я понял что туплю :)) Понятно что при проверке целостности он будет использовать первичный (или уникальный ключ, а значит и индекс) и это всегда хорошо. Молодец поздравляю. Там же проверки будут в основном до первого совпадения в b-tree, стоимость там 3-4 чтения. И без индекса там было бы такое шоу с блокировками что ой. Евгений Фадеев Я про соединения. В общем действительно не о том спорил :)) Хотя вопрос про управление индекснами остался открытым.Управляй на здоровье: параметр optcompind, хинты +use_hash, index, use_nl, full, avoid_ ,... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 11:58 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев Денис Евгений Фадеев Впрочем написав я понял что туплю :)) Понятно что при проверке целостности он будет использовать первичный (или уникальный ключ, а значит и индекс) и это всегда хорошо. Молодец поздравляю.Спасибо :)) Журавлев Денис Евгений Фадеев Я про соединения. В общем действительно не о том спорил :)) Хотя вопрос про управление индекснами остался открытым.Управляй на здоровье: параметр optcompind, хинты +use_hash, index, use_nl, full, avoid_ ,...Да в том то и дело, что зачастую проще не иметь индекса (как для приведенного мной выше примера), чем рулить КАЖДЫЙ запрос хинтами оптимизатора. Опять же - завтра распределение поменяется и что, все запросы перекрыживать? А если их сотни и тысячи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 12:03 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевДа в том то и дело, что зачастую проще не иметь индекса (как для приведенного мной выше примера), чем рулить КАЖДЫЙ запрос хинтами оптимизатора. Без хинтов и так все в порядке. Статистику собирай иногда --update statistics ... Давай ты пример сделаешь реальный покажешь как у тебя все плохо (только пож-а нормализованная бд и если нетрудно с сурогатными ключами). Евгений Фадеев Опять же - завтра распределение поменяется и что, все запросы перекрыживать? Я тоже против хинтов и в информиксе ими почти не пользовался (только use_hash в DSS запросах), вот в оракле другое дело -- кругом у меня хинты :) (частично это объясняется бедностью синтаксиса информикс sql, частично тем что план в информикс строится при первом выполнении курсора). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2006, 12:11 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевПроще некуда: есть длинная таблица (скажем 10-100 млн. строк). В ней есть внешний ключ на короткий справочник (скажем 2-20 строк). Соответственно избирательность индекса по внешнему ключу - никакая. Использование такого индекса - гарантия тормозов. Позволю себе не согласиться для общего случая. При проверке целостности индекс не используется для доступа к данным, он нужен исключительно для проверки [не]cуществования записей. То есть, при удалении записи из справочника без каскадного удаления нужно выполнить нечто типа Код: plaintext Если индекс по внешнему ключу не создан, для этой проверки в случае, если деталей нет, придется сделать фуллскан таблицы. В то же время даже самый неселективный b-индекс сможет почти мгновенно дать ответ на этот вопрос. К сожалению, не знаю, насколько это соображение применимо для Informix. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 09:18 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
softwarer Код: plaintext Если индекс по внешнему ключу не создан, для этой проверки в случае, если деталей нет, придется сделать фуллскан таблицы. В то же время даже самый неселективный b-индекс сможет почти мгновенно дать ответ на этот вопрос.Боюсь Вас огорчить, но мне кажется Вы питаете распространенное заблуждение о том, что выборка по индексу всегда быстрее сканирования таблицы. Это не всегда так. Особенно для больших таблиц и "глубоких" индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 11:16 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевБоюсь Вас огорчить, но мне кажется Вы питаете распространенное заблуждение о том, что выборка по индексу всегда быстрее сканирования таблицы. Это не всегда так. Особенно для больших таблиц и "глубоких" индексов.Внутренняя суть btree индекса такова, что не существует индексов с глубиной (blevel) больше 6-ти (~log(2(4)kb)), поэтому проверить есть значение в индексе или нет (exists), стоит не больше 6-ти чтений, вне зависимости ни от чего. ЗЫЖ softwarer никогда не ошибается, потому что он прав всегда (это аксиома). То что вы пытаетесь нам объяснить всем понятно: индексы читаются одноблочными скачущими чтениями, после этого надо сходить в таблицу, поэтому многоблочное последовательное чтение таблицы "дешевле", только это не наш частный случай (нам и таблица-то не нужна). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 11:22 |
|
||
|
|

start [/forum/topic.php?fid=44&msg=33973239&tid=1608596]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 354ms |

| 0 / 0 |
