|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
Хотелось бы услышать от опытных людей как они решают в каких случаях строить индекс на внешний, а когда - нет. Пример (вырожденный, для иллюстрации. Не делайте так): Таблица содержит колонку "пол", который хранится в виде числа 0/1. Эта колонка является внешним ключом на "таблицу полов" обычно содержащую две строчки, как когда-то было с sys.dual. Таблица полов содержит главный ключ (0,1), который требует индекса как это водится. Таблица полов статична, т.е. тип внешнего ключа не важен. Можно cascade, можно нет. В этом примере трудно представить полезный запрос, где таблица полов будет ведущей чтобы оправдать наличие индекса пола в таблице людей. Какими правилами руководствуется вы, решая нужен ли индекс на внешнем ключе, если задумывались об этом раньше? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 22:33 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
Критерии для создания индексов на полях внешних ключей ничем не отличаются от любых остальных. Кроме одного дополнительного: полная блокировка таблицы при DML. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 00:36 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
С первой частью понятно. Вы говорите что наличие внешнего ключа не является фактором при решении нужен индекс или нет. А что означает полная блокировка таблицы при DML? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 00:55 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
НеофитSQLА что означает полная блокировка таблицы при DML? Что без индекса на полях внешнего ключа таблица блокируется целиком во время DML запросов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 01:07 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
маленькая поправка Dimitry Sibiryakov НеофитSQLА что означает полная блокировка таблицы при DML? Что без индекса на полях внешнего ключа таблица блокируется целиком во время DML запросов на мастер-таблице. кроме того, не на всяком dml. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 01:21 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
Если будет индекс, будет блокироваться индекс на таблице-деталь. Не будет - блокировка всего справочника на update,insert,delete. Наступали на эти грабли. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 01:38 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
НеофитSQL, у нас так в вики написано: ОБЯЗАТЕЛЬНО создаем индексы по полям с foreign key'ями. Без них происходит блокировка всей таблицы при проверке целостности. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 10:12 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
На, игру в "испорченный телефон" похоже ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 18:18 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
mnbvcx НеофитSQL, у нас так в вики написано: ОБЯЗАТЕЛЬНО создаем индексы по полям с foreign key'ями. Без них происходит блокировка всей таблицы при проверке целостности. Спасибо, этот ответ на мой первоначальный вопрос самый информативный. Я испытал это на своем примере, и обнаружил что даже нулевой некомиттед апдейт (нулевой - в смысле не изменяющий значение основной таблицы содержащий интересующий нас ключ) блокирует все другие таблицы, которые на нее ссылаются, при отсутствии индексов. Брутально. Я почему-то ожидал что только апдейты изменяющие значение колонки ключа вызовут проверку целостности и сопутствующую блокировку. Очень полезная инфа. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 02:32 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
Уже пора засыпать, но в голову лезет такая мысль: а что же происходит с таблицами где одна колонка внешним ключом ссылается на другую? Как например object_id и parent_id. Я такой давно пользуюсь без индекса на parent_id, это наверное не рекомендуется, ведь такая таблица сама себя может заблокировать. Завтра обязательно попробую это сделать. Нужно именно delete или update, т.к. insert не должны приводить к перепроверке внешнего ключа, правильно? Прямо тикающая бомба этот внешний ключ. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 07:43 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
О сколько нам открытий чудных... Если доку не читать, конечно, где заготовлен раздел "Locks and Foreign Keys" ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 09:33 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
"чтобы форейн кеи не блокировали таблицы можно дропнуть форейн кей" (с) Сунь Цзы "искуство sql" 9-й век н.э ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 09:53 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
"скорость превыше целостности" - олимпийский лозунг ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 16:06 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
НеофитSQL mnbvcx НеофитSQL, у нас так в вики написано: ОБЯЗАТЕЛЬНО создаем индексы по полям с foreign key'ями. Без них происходит блокировка всей таблицы при проверке целостности. Спасибо, этот ответ на мой первоначальный вопрос самый информативный. Вероятно ты просто это хотел услышать поэтому тебе так понравилось. НеофитSQL Я испытал это на своем примере, и обнаружил что даже нулевой некомиттед апдейт (нулевой - в смысле не изменяющий значение основной таблицы содержащий интересующий нас ключ) блокирует все другие таблицы, которые на нее ссылаются, при отсутствии индексов. Твои бесконечные попытки использовать "умные" термины делают твои посты еще более нелепыми. Все когда-то были чайниками но не все пытались с надутыми щеками строить из себя непонятно кого. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 16:49 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
НеофитSQL "скорость превыше целостности" - олимпийский лозунг Можно отключать ключи перед загрузкой и выполнять foreign key enable validate когда нагрузка минимальна. Можно вспомнить про rely disable novalidate и какие плюсы это несет для оптимизатора. Можно подумать чем отличается валидация при вставке и валидация запросом с точки зрения производительности. Можно смотреть на проблему под разными углами, а можно увидеть желаемую ремомендацию ноунейма из интернетов и слепо ей следовать... ...ну пока не придётся грузить сотни миллионов строк в таблицу фактов с десятком измерений. Тогда придётся снова подумать, хотя до этого может и не дойти. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 16:55 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
Кобанчег грузить сотни миллионов строк в таблицу фактов с десятком измерений. Есть обратная сторона вопроса - привыкши грузить гигазы варезов, начинаешь с трудом воспринимать потребности мелких систем, системочек и системок. Т.е. тебя просят построить вооот такой запросик, а ты зависаешь на пару часов в метаниях "как зайти в таблицу, как дешевле вязать, а не дешевле ли будет вместо join заюзать group by"... а в базейке той отродясь больше 10 лямов не водилось и тут вообще пофиг как именно самовыражаться :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 17:03 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
andrey_anonymous пофиг как именно самовыражаться :) Сомневаюсь что у советчиков есть понимание когда именно индекс пригодится при DML. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 17:28 |
|
Индексы на внешних ключах
|
|||
---|---|---|---|
#18+
andrey_anonymous, справедливое замечание. У меня меньше одного "ляма", поэтому неэффективность решений далеко не всегда очевидна. 10 кратная разница в скорости мало видна, когда почти все в миллисекундах. Отсюда и многие мои вопросы к господам "дальнобойщикам". Это у вас боковой ветер и температура воздуха влияет на расход топлива, а я на мотоцикле не замечаю. Но интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2021, 17:38 |
|
|
start [/forum/topic.php?fid=52&msg=40071387&tid=1880166]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
129ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 245ms |
0 / 0 |