Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
День добрый! Насколько я понял из наблюдений за сервером и чтения форума (я с Информиксом совсем недавно) - он автоматически строит индексы на ключи (первичные и внешние). Соответственно у меня несколько вопросов: 1. Индекс на первичный ключ (по умолчанию) - некластерный. Можно такое поведение как-то изменить? 2. Можно ли выбросить некоторые индексы на внешние ключи (например в ситуации, когда таблица длиной в несколько десятков миллионов записей ссылается на таблицу длиной в десяток записей)? Или с этим нужно жить (либо он сам такие индексы пользовать не будет, либо ему нужно хинтами это задавать)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 14:09 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений Фадеев Насколько я понял из наблюдений за сервером и чтения форума (я с Информиксом совсем недавно) - он автоматически строит индексы на ключи (первичные и внешние). Если такого индекса нет, то он строит сам, а если есть -- то его и пользует. Евгений Фадеев 1. Индекс на первичный ключ (по умолчанию) - некластерный. Можно такое поведение как-то изменить?Создать самому? Но два момента: записи таблицы упорядоченными по индексу будут только в момент постройки индекса, далее из-за DML операций они таковыми уже не будут, и самое главное это нафиг не надо. Евгений Фадеев2. Можно ли выбросить некоторые индексы на внешние ключи (например в ситуации, когда таблица длиной в несколько десятков миллионов записей ссылается на таблицу длиной в десяток записей)? Или с этим нужно жить (либо он сам такие индексы пользовать не будет, либо ему нужно хинтами это задавать)?Выбросить нельзя. Такие индексы (на внешние ключи) он использовать будет, например при удалении из справочника, при соединении со справочником. Зачем их не использовать? Зачем хинты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 14:46 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевДень добрый! Насколько я понял из наблюдений за сервером и чтения форума (я с Информиксом совсем недавно) - он автоматически строит индексы на ключи (первичные и внешние). Соответственно у меня несколько вопросов: 1. Индекс на первичный ключ (по умолчанию) - некластерный. Можно такое поведение как-то изменить? Создайте индекс раньше, чем первичный ключ. Еще есть оператор alter index Евгений Фадеев 2. Можно ли выбросить некоторые индексы на внешние ключи (например в ситуации, когда таблица длиной в несколько десятков миллионов записей ссылается на таблицу длиной в десяток записей)? Или с этим нужно жить (либо он сам такие индексы пользовать не будет, либо ему нужно хинтами это задавать)? Внешнего ключа без индекса не бывает. Использовать индекс или нет, решает оптимизатор. Почему вы думаете, что индекс вам помешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 14:52 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевДень добрый! Насколько я понял из наблюдений за сервером и чтения форума (я с Информиксом совсем недавно) - он автоматически строит индексы на ключи (первичные и внешние). Соответственно у меня несколько вопросов: 1. Индекс на первичный ключ (по умолчанию) - некластерный. Можно такое поведение как-то изменить? Можно, нужно построить уникальный кластерный индекс а потом создавать ПК. В этом случае сервер будет пользоваться индексом построенным заранее. Евгений Фадеев 2. Можно ли выбросить некоторые индексы на внешние ключи (например в ситуации, когда таблица длиной в несколько десятков миллионов записей ссылается на таблицу длиной в десяток записей)? Или с этим нужно жить (либо он сам такие индексы пользовать не будет, либо ему нужно хинтами это задавать)? Нельзя. Для FK индекс нужен по обьективным причинам 1. По полям PK=FK очень часто делается join. 2. Проверка целостности. При попытке удаления PK записи поверка наналичие FK записи производится по индексу. 3. Каскадное удаление. Не понимаю в чем может быть выигрыш от отсутствия индекса под FK? и зачем может пондобится давить FK индекс хинтами ? Может лучше вообще не строить FK если он мешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 14:52 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Итого в сухом остатке: 1. С первичными ключами понятно. Забиваем. 2. Индексы на внешние ключи. Вопрос на засыпку: всегда ли наличие индекса ускоряет SELECT? 3. (to onstat-) Внешние ключи нужны не для ускорения чего бы то ни было, а для определения ограничений в рамках схемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 14:59 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
ЗЫЖ Целостность можно поддерживать с помощью триггеров и check констрейнтов, тогда индексы можно не делать. С помощью триггеров можно много чего интересного наделать, например в качестве pk сделать поле(я) вьюхи (таблицы из другой бд). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 15:01 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений Фадеев 2. Индексы на внешние ключи. Вопрос на засыпку: всегда ли наличие индекса ускоряет SELECT?Всегда. Оптимизатор решает использовать или нет. Всегда замедляют insert. Всегда ускоряют update, delete (в смысле когда фильтр нормальный, информикс -- блокировщик). На каждое всегда естественно найдутся исключения, но писать лень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 15:06 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисВсегда. Оптимизатор решает использовать или нет.То есть сервер их строит всегда, а потом оптимизатор мучается выбором? :) Журавлев ДенисВсегда замедляют insert.Это понятно. Журавлев ДенисВсегда ускоряют update, delete (в смысле когда фильтр нормальный, информикс -- блокировщик).А если происходит UPDATE индексированного поля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 16:08 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисЗЫЖ Целостность можно поддерживать с помощью триггеров и check констрейнтов, тогда индексы можно не делать.Да все можно - зачем только? Если все тоже самое можно делать гораздо проще, нагляднее, быстрее и дешевле?! Журавлев ДенисС помощью триггеров можно много чего интересного наделать, например в качестве pk сделать поле(я) вьюхи (таблицы из другой бд).Стоя на лыжах в гамаке? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 16:16 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевТо есть сервер их строит всегда, а потом оптимизатор мучается выбором? :)Ага, он комсомолец. Евгений Фадеев Это понятно.Я рад. Евгений ФадеевА если происходит UPDATE индексированного поля?А если delete? В общем зачем я вам объясняю если вы и так все знаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 16:22 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисВ общем зачем я вам объясняю если вы и так все знаете.:)) Я не все знаю. Я про Информикс - совсем мало. Я с ним всего пару месяцев сожительствую. На самом деле за ответы спасибо. Мне они были нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 16:26 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевДа все можно - зачем только? Если все тоже самое можно делать гораздо проще, нагляднее, быстрее и дешевле?!Ага, сегодня тяпница, будем развлекатся. Erwin раньше так генерировал триггера -- ух, только батоны жми, писофкейк. Очень напрягал меня информикс автоиндексами в ситуации: таблица 200 млн. записей, есть мой индекс (fk, f1), а он пративный еще избыточный (fk) хочет. Поработав с информиксом 2 года я понял что создавать несколько бд в одном инстансе -- идиотия, и лишний геморрой. Был случай: бд 400 таблиц, две таблицы с естественными ключами, остальные сурогаты, конечно естественный ключ пришлось изменить, добавить поле и исключить уникальность, для того чтоб старый код хоть как-нибудь работал, таблицу переименовали, создали вью (с именем ляля_tbl -- гыгы), изображающее из себя старую таблицу, и целостность поддерживать триггерами выполняя селекты на вью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 16:34 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений Фадеев 3. (to onstat-) Внешние ключи нужны не для ускорения чего бы то ни было, а для определения ограничений в рамках схемы. Я и об этом написал onstat- 2. Проверка целостности. При попытке удаления PK записи поверка наналичие FK записи производится по индексу. Другие базы данных могут проверять по таблице(данным), но Infromix проверку FK делает именно по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 16:45 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
onstat- Евгений Фадеев 3. (to onstat-) Внешние ключи нужны не для ускорения чего бы то ни было, а для определения ограничений в рамках схемы. Я и об этом написал Я это к тому что onstat-Может лучше вообще не строить FK если он мешает?Ну и (если начать придираться, чего делать не хочется) - ключ не строится, а объявляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 16:56 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Тяпничное: Поработав два года с ораклом я понял какое счастье, что в информиксе по умолчанию планы запросов не шарятся между сессиями и для каждого курсора строятся заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 17:14 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисТяпничное: Поработав два года с ораклом я понял какое счастье, что в информиксе по умолчанию планы запросов не шарятся между сессиями и для каждого курсора строятся заново.Э... А в чем счастье-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 17:18 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений Фадеев onstat- Евгений Фадеев 3. (to onstat-) Внешние ключи нужны не для ускорения чего бы то ни было, а для определения ограничений в рамках схемы. Я и об этом написал Я это к тому что onstat-Может лучше вообще не строить FK если он мешает?Ну и (если начать придираться, чего делать не хочется) - ключ не строится, а объявляется. Ну если быть окончательно педантичным то не ключ, а ограничение добавляется (alter table ...... add constraint ......). Я прошу прощения за то, что нечаянно ввел Вас в заблуждение некорректным переводом(интерпретацией). Я не собирался придираться, мне просто интересно чем в данном случае Евгений Фадеев 2. Можно ли выбросить некоторые индексы на внешние ключи (например в ситуации, когда таблица длиной в несколько десятков миллионов записей ссылается на таблицу длиной в десяток записей)? Или с этим нужно жить (либо он сам такие индексы пользовать не будет, либо ему нужно хинтами это задавать)? мешает индекс на FK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 18:27 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевЭ... А в чем счастье-то?Гыгыыгы. В том. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 19:47 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Для Фадеева OFFTOPIC: Как дела на новом месте? Пиши на мыло sher хороший человек terlis точка ru. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 19:59 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев Денис Евгений Фадеев 2. Индексы на внешние ключи. Вопрос на засыпку: всегда ли наличие индекса ускоряет SELECT?Всегда. Оптимизатор решает использовать или нет. Не соглашусь. К тому же и оптимизатор не всегда такой умный, как хотелось бы. Журавлев ДенисНа каждое всегда естественно найдутся исключения, но писать лень. В том то и дело, что эти исключения иногда играют большое значение и вполне понятно желание Евгения управлять возможностями. Как и в случае с автоматическим построением индексов для внешних ключей (как, например, у Оракла, когда автоматом не строится). Но все же, если сравнивать в общем, то я бы все таки оставил принудительное построение индексов, т.к. это намного лучше, чем когда люди вообще не строят индексы на ключах (видел пару раз такие промышленные БД на Оракле, когда у заказчика через несколько месяцев эксплуатации "вдруг" все начинало жутко тормозить, а у разработчика на малых объемах летало). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 19:12 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Тан Евгений Фадеев 2. Можно ли выбросить некоторые индексы на внешние ключи (например в ситуации, когда таблица длиной в несколько десятков миллионов записей ссылается на таблицу длиной в десяток записей)? Или с этим нужно жить (либо он сам такие индексы пользовать не будет, либо ему нужно хинтами это задавать)? Почему вы думаете, что индекс вам помешает? Пример такого "мешающего" индекса - автоиндекс на ключ "пол", где всего два значения М и Ж. Надо доказывать неэффективность такого индекса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 19:39 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
vasilisПример такого "мешающего" индекса - автоиндекс на ключ "пол", где всего два значения М и Ж. Надо доказывать неэффективность такого индекса ? А можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 21:23 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
vasilisвсего два значения М и Ж. А что так мало ? Обычно 3, иногда 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 08:46 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
vasilis Тан Евгений Фадеев 2. Можно ли выбросить некоторые индексы на внешние ключи (например в ситуации, когда таблица длиной в несколько десятков миллионов записей ссылается на таблицу длиной в десяток записей)? Или с этим нужно жить (либо он сам такие индексы пользовать не будет, либо ему нужно хинтами это задавать)? Почему вы думаете, что индекс вам помешает? Пример такого "мешающего" индекса - автоиндекс на ключ "пол", где всего два значения М и Ж. Надо доказывать неэффективность такого индекса ? А это зависит от распределения данных. И если согласно распределению индекс не эффективен, тогда он не будет использоватся оптимизатором. Зато без индекса большой проблемой будут попытки изменить значения ключа в главной таблице. Или записи из нее удалить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 10:15 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Тан А это зависит от распределения данных. И если согласно распределению индекс не эффективен, тогда он не будет использоватся оптимизатором. Индексы на таблицы размером меньше одной страницы почти никогда не используются, хотя можно попробовать что будет если все поля таблицы в индекс включить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 11:22 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисВнутренняя суть btree индекса такова, что не существует индексов с глубиной blevel больше 6-ти (~log(2(4)kb)), поэтому проверить есть значение в индексе или нет (exists), стоит не больше 6-ти чтений, вне зависимости ни от чего.Сильное утверждение. То есть Вы утверждаете, что вне зависимости от объема данных поиск всегда проходит не более чем за 6 операций чтения. А поподробнее можно? Журавлев ДенисЗЫЖ softwarer никогда не ошибается, потому что он прав всегда (это аксиома).В такой постановке это не аксиома, а догма. А догмы я не приемлю (во всяком случае стараюсь) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 11:27 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений ФадеевСильное утверждение. То есть Вы утверждаете, что вне зависимости от объема данных поиск всегда проходит не более чем за 6 операций чтения.НЕТ!!! Я утверждал что поиск одного значения происходит не более чем за 6-ть операций чтения (причем я сказал много больше, тут надо упоминать blevel который зависит от кол-ва значений ключей индекса, размеров ключей индекса и размера страницы индекса). Евгений ФадеевА поподробнее можно?А смысл? Хотите пример покажу? Евгений Фадеев Журавлев ДенисЗЫЖ softwarer никогда не ошибается, потому что он прав всегда (это аксиома).В такой постановке это не аксиома, а догма. А догмы я не приемлю (во всяком случае стараюсь) :)Нет это именно аксиома ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 12:07 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев Денисзначения происходит не более чем за 6-ть операций Да, еще : если вы случайно найдете индекс с blevel>6 (я не могу себе такой представить при страницах индекса 2кб.), например blevel=7, то конечно там будет уже целых 7 операций чтения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 12:13 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
to Журавлев Денис и softwarer - Господа, прошу простить. Пятница, утро, тяжелая неделя. Вопрос снят, все правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 12:20 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений Фадеевto Журавлев Денис и softwarer - Господа, прошу простить. Пятница, утро, тяжелая неделя. Вопрос снят, все правильно.Ок. У меня правда тоже некоторая каша в голове blevel равен логарифму (кол-ва значений) по основанию (кол-во значений помещающихся на страницу). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 12:29 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев Денисblevel равен логарифму (кол-ва значений) по основанию (кол-во значений помещающихся на страницу).Это уже подробности. Если индекс (предположим :)) сильно широкий, то на страницу занчений можем помещаться с гулькин нос. При таких раскладах и все 10 уровней может нарисоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 12:37 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Евгений Фадеев Журавлев Денисblevel равен логарифму (кол-ва значений) по основанию (кол-во значений помещающихся на страницу).Это уже подробности. Если индекс (предположим :)) сильно широкий, то на страницу занчений можем помещаться с гулькин нос. При таких раскладах и все 10 уровней может нарисоваться. Может, но какое отношение это имеет к теме спора. Здесь в силу вступают другие правила. Кто виноват, у в ключе 512 байт пробелов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 15:09 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
onstat-Может, но какое отношение это имеет к теме спора.Никакого! :) От спора уже ушли, я так понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 15:12 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
Журавлев ДенисВнутренняя суть btree индекса такова, что не существует индексов с глубиной (blevel) больше 6-ти (~log(2(4)kb))... Просто для справки (IDS 9.30): Maximum number of B-tree levels = 20 Bytes per index = 390 Для 10.хС5 B-tree levels такой же, а размер индекса уже поболее: Maximum bytes per index key (for a given page size): 2K page size = 387 4K page size = 796 8K page size = 1615 12K page size = 2435 16K page size = 3254 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 15:46 |
|
||
|
Индексы на ключи
|
|||
|---|---|---|---|
|
#18+
vasilis Maximum number of B-tree levels = 20 О! Можно мерятся blevel, у кого больше . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2006, 15:50 |
|
||
|
|

start [/forum/topic.php?all=1&fid=44&tid=1608596]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 412ms |

| 0 / 0 |
