powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Внешнии ключи и скорость
39 сообщений из 39, показаны все 2 страниц
Внешнии ключи и скорость
    #40002166
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.
Не первый раз встречаюсь что на прадакшн серверах не делают внешние ключи на таблицах для скорости работы.
Действительно ли это улучшает скорость работы?
Стоит ли так делать?
Где можно почитать статьи на эту тему?
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002169
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro,

Зависит от целей и задач. Неиндексированный внешний ключ застопорит систему в момент удаления записей из родительской таблицы. Отсутствие ключа - вынудит добавлять дополнительные проверки в коде.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002176
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Цель ускорить запись в бд/таблицу.
Следует ли удалять для этого внешние ключи?
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002177
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
DrKro,

Зависит от целей и задач. Неиндексированный внешний ключ застопорит систему в момент удаления записей из родительской таблицы. Отсутствие ключа - вынудит добавлять дополнительные проверки в коде.


Написать ответ и не дать ответ ни на один вопрос это талант

Модератор: А вот вести диалог в такой манере не рекомендую. Вам тут никто ничем не обязан, а разведе срач на ровном месте - последуют оргвыводы.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002183
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro
Цель ускорить запись в бд/таблицу.
Следует ли удалять для этого внешние ключи?
А вы уже разобрались, что проблема только во внешних ключах?

Тут как-то был эпический срач спор на тему сабжа, поищите. Я сходу не нашел.
UPD: нашел
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002194
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич
DrKro
Цель ускорить запись в бд/таблицу.
Следует ли удалять для этого внешние ключи?
А вы уже разобрались, что проблема только во внешних ключах?

Спасибо за ссылку.
Вопрос чисто теоретической, самой проблемы у меня нет.
Это было наблюдение.. которое вызывает соответствующие вопросы
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002202
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro
Цель ускорить запись в бд/таблицу.


Сферическую в вакууме?

Если идёт запись непрерывным потоком, а обработка данных может быть отложена, то имеет смысл завести отдельно таблиц(у|ы) для записи без индексов и ключей, и отдельно процедуру переноса записей в целевую таблицу.

DrKro
Написать ответ и не дать ответ ни на один вопрос это талант

На сферические вопросы в вакууме сложно ответить по-другому.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002207
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
DrKro
Цель ускорить запись в бд/таблицу.

На сферические вопросы в вакууме сложно ответить по-другому.

Ну речь именно о внешних ключах, не о индексах, не о пользе внешних ключей, не пользе индексов, не об альтернативах решения каких-то конкретных проблем, а о роли производительности внешних ключей при записи данных

Какую они играют роль в производительности при записи.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002209
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Речь о конкретных знаниях по вопросу, а не поиске решения проблемы
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002217
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro,

Исходный вопрос был "Слышал странный стук в подвале, что на прадакшн серверах не делают внешние ключи на таблицах для скорости работы.
Действительно ли это улучшает скорость работы?
Стоит ли так делать? "

Без уточнения какой класс задач решает система, насколько в ней важна согласованность данных, какими объёмами данных оперирует, каким критериям (например, загружать 99,9% входящего потока от внешних устройств на скорости 100М записей в секунду с потерей не более одного сообщения на 1М и доступностью агрегированных данных по датчикам в течение 10 минут после поступления в систему) отвечает и т.п.

Т.е. сферический вопрос ни о чём. Для начала имеет смысл почитать для чего вообще нужны внешние ключи, какую роль они выполняют в бд, а уже исходя из этого подумать, на какие действия с данными и как это повлияет.

Единого правильного ответа на исходный вопрос - нет. Всё зависит от контекста.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002218
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro
Ну речь именно о внешних ключах, не о индексах


Видите ли, сударь, эти конструкции в бд очень даже тесно связаны. Особенно для операций, которые затрагивают ссылочную целостность.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002219
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
DrKro,
Единого правильного ответа на исходный вопрос - нет. Всё зависит от контекста.


При каком контексте имеет смыл не делать внешних ключей
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002224
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DrKro
env
DrKro,
Единого правильного ответа на исходный вопрос - нет. Всё зависит от контекста.


При каком контексте имеет смыл не делать внешних ключей

и чтобы от этого была польза
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002230
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DrKro
DrKro
пропущено...


При каком контексте имеет смыл не делать внешних ключей

и чтобы от этого была польза

А их наличие приносило вред
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002234
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro
При каком контексте имеет смыл не делать внешних ключей


Если система ориентирована на скорость поступления данных, и для этого можно пожертвовать их связностью.

Или если целостность гарантирована иным способом или не требуется "в моменте". Например, слой итоговых витрин данных в хранилище, где запись в измерение может попасть позже записи в фактах, но к моменту обсчёта многомерной модели данные будут согласованы.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002240
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro
А их наличие приносило вред


Обычно вред приносит не их наличие, а непонимание, для чего они нужны и какие механизмы отрабатывают ссылочную целостность. Пример с удалением, блокирующем работу всей системы, уже приводил. проблема в этом случае не в наличии FK, а в отсутствии индекса по входящим в него полям (упд. обслуживание которого тоже чего-то да стоит).
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002241
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
DrKro
При каком контексте имеет смыл не делать внешних ключей


Если система ориентирована на скорость поступления данных, и для этого можно пожертвовать их связностью.

Или если целостность гарантированна иным способом или не требуется "в моменте". Например, слой итоговых витрин данных в хранилище, где запись в измерение может попасть позже записи в фактах, но к моменту обсчёта многомерной модели данные будут согласованы.


Супер) Спасибо, на два первые вопроса есть ответ

1)Действительно ли это улучшает скорость работы? - Да
2)Стоит ли так делать? - Когда это требуется, Да.
3)Где можно почитать статьи на эту тему? - погуглю.. но если есть известные статьи я не откажусь, да и никто не откажется
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002243
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro
1)Действительно ли это улучшает скорость работы? - Да

Нет. Т.к. получаются несогласованные данные, кривые результаты и потеря денег бизнесом, приводящая к длительным затратам на поиск причин и тормозящая работу всей системы. Контекст и ещё раз контекст.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002246
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
DrKro
1)Действительно ли это улучшает скорость работы? - Да

Нет. Т.к. получаются несогласованные данные, кривые результаты и потеря денег бизнесом, приводящая к длительным затратам на поиск причин и тормозящая работу всей системы. Контекст и ещё раз контекст.


Дальше я совсем не специалист, но выскажу предположение: в монге ведь нет внешних ключей и как то живут с этим..
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002247
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro,

И используют ровно под те же задачи, что и sql server?
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002250
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro,

Ну вот вам пример на вскидку:

Вы работаете на складе, у Вас есть некая полка где вы складируете материалы а также есть специальная тетрадка где есть список продукции хранимой на складе.

время от времени к вам приносят детали
вот тут и начинаются различия в постановке задачи:
1) ваша задача стоит в том что вы должны принять материал на склад но перед этим сверится с тетрадкой, а возможно ли хранение такого материала на складе?
2) вы просто тупо должны принять материал на склад

В первом варианте конечно Ваша производительность труда будет снижена, потому что сначала вы должны сверится с тетрадью и найти наименование материала который вам принесли и понять можете ли вы его принять, но вы четко будете следовать должностной
инструкции и поставленной перед Вами задачи и не будете садится на измену что завтра к вам заявится УБОП в целью взять Вас за яйца привлечения к уголовной отвественности

Во втором варианте вы работаете с максимальной отдачей и скоросью принимая любой товар как заправский ломбард. Но визит вышеописанной конторы никто не отменял.

Оба варианта имеют место быть но как видити все зависит от первоначальной задачи и степени осознания рисков
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002260
DrKro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

не ровно, конечно.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002401
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro
Цель ускорить запись в бд/таблицу.
Следует ли удалять для этого внешние ключи?
Разумеется, без внешних ключей запись будет быстрее. Неужели у вас были сомнения?

DrKro
Стоит ли так делать?
Как правило нет, по возможности.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002423
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Разумеется, без внешних ключей запись будет быстрее

with nocheck .. nocheck
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrKro
в монге ведь нет внешних ключей и как то живут с этим..

А в болидах F1 нет бамперов, подушек безопасности, автоматической коробки передач и туевой хучи всего, что обычно ставят на какой-нибудь грузовик. Надо правильно выбирать инструмент под задачу.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002617
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Идёт к тому, что добавят
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002632
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Давайте обсуждать болиды Ф1 за пределами этого форума
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002697
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
alexeyvg
Разумеется, без внешних ключей запись будет быстрее

with nocheck .. nocheck
Ну, это всё равно что без FK :-)
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40002705
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я скажу, что удаление любых ключей или индексов всегда ускорит операции insert/update для таблицы, где убрали ключи, т.к. меньше проверок- меньше инструкций.

При этом гарантии ссылочной целостности снизились, теперь старые запросы могут дать другие результаты.

Сколько времени позволено БД оставаться в возможно негодном состоянии? Если ноль, то ключи это выполняли.

Если можно отложить, то можно проверять и править позже. Я так делал для импорта миллиона строк в справочник, который обновлялся только в нерабочее время.

Это не затрагивая OnDelete.

Ещё можно ускорить запись если заменить все поля одним blob, но нужно ли?
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40003141
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Я скажу, что удаление любых ключей или индексов всегда ускорит операции insert/update для таблицы, где убрали ключи, т.к. меньше проверок- меньше инструкций.
Мало того, можно параллельно вставлять данные в мастер и детейл таблицы.
И даже в кучу таблиц, не заботясь о последовательности.

Понятно, что во время процедуры вставки база будет в неконсистентном состоянии, и нет гарантии, что она не останется в нём после загрузки.

В общем, правильный и исчерпывающий ответ сразу был дан первым же ответом - силён SQL.RU, "все про базы данных и программирование"!
env
Зависит от целей и задач.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40003215
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Ещё можно ускорить запись если заменить все поля одним blob

А можно пример? Желательно на параллельной вставке нескольких миллионов строк.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40003359
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
НеофитSQL
Ещё можно ускорить запись если заменить все поля одним blob

А можно пример? Желательно на параллельной вставке нескольких миллионов строк.
зачем же неск млн

для начала хотя бы на одном десятке
с примерами инсерта
а также апдейта и делита по условиям и джойнам
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40004460
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я знаю, то ли с 16, то ли с 17 MS внесло существенные изменения в работу с внешними ключами для увеличения производительности, особенно при наличии множественных ключей в одной таблице.

Можно содрать тестовую базу и поэкспериментировать на нескольких миллионах внешних ключей для вставки - удаления. Скорее, большую проблему может принести наличие дополнительных индексов в дочерней таблице, чем проверка внешнего ключа.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40004521
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет всем, давно не виделись!
Владислав Колосов
Насколько я знаю, то ли с 16, то ли с 17 MS внесло существенные изменения в работу с внешними ключами для увеличения производительности, особенно при наличии множественных ключей в одной таблице.

это очень похоже на пиар и только,
вот в этой статье Query optimizer changes in SQL Server 2016 explained
товарищ тоже нашел блог,
где демонстрируется один новый оператор Foreign Key References Check,
даже картинка приводится.
вот только не воспроизводится.
ни у него, ни у меня.

мой сервер:
Код: coco
1.
2.
Microsoft SQL Server 2019 (RTM-CU7) (KB4570012) - 15.0.4063.15 (X64)   Aug 15 2020 10:48:11   
Copyright (C) 2019 Microsoft Corporation  Enterprise Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor) 



картинка делита на базе в совместимости 150
(от тучи проверок ФК экран разрывается):
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40004522
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
картинка отвалилась, извиняюсь
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40004525
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
план тоже прикрепляю, rar,
сам план 159Кб и пишут, размером не вышел.
хорошее же удаление одной строки, что план в форум не дают запостить
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40004584
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
привет всем, давно не виделись!
Владислав Колосов
Насколько я знаю, то ли с 16, то ли с 17 MS внесло существенные изменения в работу с внешними ключами для увеличения производительности, особенно при наличии множественных ключей в одной таблице.

это очень похоже на пиар и только,
вот в этой статье Query optimizer changes in SQL Server 2016 explained
товарищ тоже нашел блог,
где демонстрируется один новый оператор Foreign Key References Check ,
даже картинка приводится.
вот только не воспроизводится.
ни у него, ни у меня.

[/src]

картинка делита на базе в совместимости 150
(от тучи проверок ФК экран разрывается):


можно ссылку на болд что это за зверь - почитать

ps я правильно понял что удаляется таблица на к-ю есть ссылки с других таблиц
план конечно серьзеный а в реальности удаление проходит быстро ?

pps нашел там же
In SQL Server 2016, the Foreign Key References Check is introduced to handle all referential integrity checks in a single step. Microsoft’s documentation indicates that this change will greatly simplify execution plans and reduce compilation time for the execution plan.
т.е это на усмотрение оптимизатора ?
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40004591
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

это очень похоже на пиар

А вот это похоже на правду. т.к. я возлагал определенные надежды на эти самые улучшения, но результат не увидел. Списал на свою малограмотность.
...
Рейтинг: 0 / 0
Внешнии ключи и скорость
    #40004637
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор

можно ссылку на болд что это за зверь - почитать

ps я правильно понял что удаляется таблица на к-ю есть ссылки с других таблиц
план конечно серьзеный а в реальности удаление проходит быстро ?

ссылка там выше.
а так да, все правильно,
когда на таблицу смотрит туча ФК из еще сотни таблиц,
этот оператор должен был заменить в плане 100 NL с теми таблицами одним оператором.
и типа план быстрее компилируется и все счастливы.
откуда бы счастью быть, непонятно, ибо все эти ФК все равно проверять придется.
и если там нет индексов по нужному полю, то и будет скан 100 таблиц, помноженный на число удаляемых строк.
но по факту и план тоже остался с сотней проверок ФК,
так что экран раздирается.
ну а скорость удаления зависит от размера индексов/самих таблиц с ФК.
---
у нас обычно при красивом плане и удаление такое же длинное.
особенно приятно, когда через полчаса сервер находит значение,
которое не позволяет удалить (каскадов не держим),
удаление успешно откатывается, товарищи начинают задаваться вопросом, что с этим делать, может и правда не удалять,
проблемное значение оставляют в покое, а через полчаса другое значение вываливается,
и снова оно оказывается в нужной строке какой-то еще таблицы,
про которую до этого и не вспоминали, а тут вдруг она оказалась необходимой
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Внешнии ключи и скорость
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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