powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Индексы на внешних ключах
19 сообщений из 19, страница 1 из 1
Индексы на внешних ключах
    #40070476
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы услышать от опытных людей как они решают в каких случаях строить индекс на внешний, а когда - нет.

Пример (вырожденный, для иллюстрации. Не делайте так):

Таблица содержит колонку "пол", который хранится в виде числа 0/1. Эта колонка является внешним ключом на "таблицу полов" обычно содержащую две строчки, как когда-то было с sys.dual.

Таблица полов содержит главный ключ (0,1), который требует индекса как это водится. Таблица полов статична, т.е. тип внешнего ключа не важен. Можно cascade, можно нет.

В этом примере трудно представить полезный запрос, где таблица полов будет ведущей чтобы оправдать наличие индекса пола в таблице людей.

Какими правилами руководствуется вы, решая нужен ли индекс на внешнем ключе, если задумывались об этом раньше?
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070484
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критерии для создания индексов на полях внешних ключей ничем не отличаются от любых
остальных. Кроме одного дополнительного: полная блокировка таблицы при DML.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070489
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С первой частью понятно. Вы говорите что наличие внешнего ключа не является фактором при решении нужен индекс или нет.

А что означает полная блокировка таблицы при DML?
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070491
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQLА что означает полная блокировка таблицы при DML?

Что без индекса на полях внешнего ключа таблица блокируется целиком во время DML запросов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070492
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
маленькая поправка

Dimitry Sibiryakov

НеофитSQLА что означает полная блокировка таблицы при DML?

Что без индекса на полях внешнего ключа таблица блокируется целиком во время DML запросов на мастер-таблице.


кроме того, не на всяком dml.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070494
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если будет индекс, будет блокироваться индекс на таблице-деталь. Не будет - блокировка всего справочника на update,insert,delete. Наступали на эти грабли.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070505
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL, у нас так в вики написано:
ОБЯЗАТЕЛЬНО создаем индексы по полям с foreign key'ями. Без них происходит блокировка всей таблицы при проверке целостности.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070546
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На, игру в "испорченный телефон" похоже
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070573
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mnbvcx
НеофитSQL, у нас так в вики написано:
ОБЯЗАТЕЛЬНО создаем индексы по полям с foreign key'ями. Без них происходит блокировка всей таблицы при проверке целостности.


Спасибо, этот ответ на мой первоначальный вопрос самый информативный.

Я испытал это на своем примере, и обнаружил что даже нулевой некомиттед апдейт (нулевой - в смысле не изменяющий значение основной таблицы содержащий интересующий нас ключ) блокирует все другие таблицы, которые на нее ссылаются, при отсутствии индексов.

Брутально. Я почему-то ожидал что только апдейты изменяющие значение колонки ключа вызовут проверку целостности и сопутствующую блокировку.

Очень полезная инфа.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070583
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже пора засыпать, но в голову лезет такая мысль: а что же происходит с таблицами где одна колонка внешним ключом ссылается на другую?

Как например object_id и parent_id. Я такой давно пользуюсь без индекса на parent_id, это наверное не рекомендуется, ведь такая таблица сама себя может заблокировать.

Завтра обязательно попробую это сделать. Нужно именно delete или update, т.к. insert не должны приводить к перепроверке внешнего ключа, правильно?

Прямо тикающая бомба этот внешний ключ.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40070587
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О сколько нам открытий чудных... Если доку не читать, конечно, где заготовлен раздел "Locks and Foreign Keys"
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40071233
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"чтобы форейн кеи не блокировали таблицы можно дропнуть форейн кей" (с) Сунь Цзы "искуство sql" 9-й век н.э
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40071387
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"скорость превыше целостности" - олимпийский лозунг
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40071408
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
mnbvcx
НеофитSQL, у нас так в вики написано:
ОБЯЗАТЕЛЬНО создаем индексы по полям с foreign key'ями. Без них происходит блокировка всей таблицы при проверке целостности.


Спасибо, этот ответ на мой первоначальный вопрос самый информативный.
Это просто ответ послушного кодера который делает как указано в методичке без понимания почему так надо.
Вероятно ты просто это хотел услышать поэтому тебе так понравилось.
НеофитSQL
Я испытал это на своем примере, и обнаружил что даже нулевой некомиттед апдейт (нулевой - в смысле не изменяющий значение основной таблицы содержащий интересующий нас ключ) блокирует все другие таблицы, которые на нее ссылаются, при отсутствии индексов.
Теперь попробуй выкинуть свою бредовую терминологию и сказать нормальным языком, а лечше покажи кейс.

Твои бесконечные попытки использовать "умные" термины делают твои посты еще более нелепыми.
Все когда-то были чайниками но не все пытались с надутыми щеками строить из себя непонятно кого.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40071412
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
"скорость превыше целостности" - олимпийский лозунг
Целостность можно проверять на разных уровнях. Может ETL tool отвечать за целостность.
Можно отключать ключи перед загрузкой и выполнять foreign key enable validate когда нагрузка минимальна.
Можно вспомнить про rely disable novalidate и какие плюсы это несет для оптимизатора.
Можно подумать чем отличается валидация при вставке и валидация запросом с точки зрения производительности.
Можно смотреть на проблему под разными углами, а можно увидеть желаемую ремомендацию ноунейма из интернетов и слепо ей следовать...

...ну пока не придётся грузить сотни миллионов строк в таблицу фактов с десятком измерений. Тогда придётся снова подумать, хотя до этого может и не дойти.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40071417
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег
грузить сотни миллионов строк в таблицу фактов с десятком измерений.

Есть обратная сторона вопроса - привыкши грузить гигазы варезов, начинаешь с трудом воспринимать потребности мелких систем, системочек и системок.
Т.е. тебя просят построить вооот такой запросик, а ты зависаешь на пару часов в метаниях "как зайти в таблицу, как дешевле вязать, а не дешевле ли будет вместо join заюзать group by"... а в базейке той отродясь больше 10 лямов не водилось и тут вообще пофиг как именно самовыражаться :)
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40071430
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
пофиг как именно самовыражаться :)
Пусть самовыражаются на здоровье, только бы поменьше распространяли своё экспертное знание в интернетах.
Сомневаюсь что у советчиков есть понимание когда именно индекс пригодится при DML.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40071435
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

справедливое замечание.

У меня меньше одного "ляма", поэтому неэффективность решений далеко не всегда очевидна.

10 кратная разница в скорости мало видна, когда почти все в миллисекундах.

Отсюда и многие мои вопросы к господам "дальнобойщикам".
Это у вас боковой ветер и температура воздуха влияет на расход топлива, а я на мотоцикле не замечаю.
Но интересно.
...
Рейтинг: 0 / 0
Индексы на внешних ключах
    #40072793
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durak
"чтобы форейн кеи не блокировали таблицы можно дропнуть форейн кей" (с) Сунь Цзы "искуство sql" 9-й век н.э

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


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