Formula 1 in Code

Фильтр по тегу: foreign key


Анализ производительности "больших" операций вставки

Эта статья посвящена анализу того, на сколько сильно влияют различные объекты: внешние ограничения, индексы, кластерные представления на "большие" операции вставки.

Для этого мы рассмотрим несколько ситуаций:
1) Baseline - самая быстрая ситуация так как, на таблице, в которую будет производиться вставка, нет вообще никаких дополнительных объектов.
2) Внешние ключи- на таблице созданы только внешние ограничения.
3) Внешние ключи + индексы - помимо внешних ключей на таблице созданы базовые поддерживающие ограничения индексы.
4) Все включено - самая тяжелая ситуация, когда на таблице есть различные объекты, влияющие на производительность операции вставки: внешние ключи, индексы и кластерное представление.

Для каждой ситуации тестировалась вставка шести размеров: 2 500, 10 000, 40 000, 250 000, 1 000 000 и 4 000 000 строк. Каждое измерение производилось, как минимум 5 раз, для того, чтобы получить среднее, которому можно доверять. В добавок, перед каждым запуском очищались:
- таблицы, в которые производится вставка;
- процедурный кеш (dbcc freeproccache);
- кеш данных (dbcc dropcleanbuffers);

Таким образом я попытался создать одинаковые условия перед запуском каждого отдельного теста.

Читать далее ...
добавлено: 16 окт 11 просмотры: 1934, комментарии: 0



Правильное включение внешних ключей (foreign key)

В прошлой статье мы говорили о влиянии внешних ключей на производительность операций модификации данных. И мой главный вывод заключался в том, что накладные расходы на поддержание внешних ограничений довольно малы. Но этот вывод был не достаточно конкретен. Что значит малы? По сравнению с чем? Скорее всего из-за этого возник комментарий SQL Server MVP Дениса Резника. Он заметил, что "при вставке\обновлении\удалении больших объёмов данных правила игры немного меняются (имею ввиду то, что влияние на скорость в конечном итоге может быть не таким уж и маленьким)."

Вообще классно, когда тебя комментируют, и особенно хорошо, когда это делают MVP. Тем более я узнал, что Денис Резник из Харькова, и это круто, так как я сам родился не далеко от этого славного города, хотя всю жизнь и прожил под Санкт-Петербургом. После всего этого я просто не мог не ответить на этот комментарий развернутой статьей. Плюс это показалось мне отличным поводом разобраться в этом вопросе по-подробнее и протестировать действительное влияние внешних ключей на операции с большими объёмами данных.

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

Читать далее...
добавлено: 09 окт 11 просмотры: 1937, комментарии: 0



Влияние внешних ключей (fk) на insert / update / delete операции

В прошлой статье мы разобрались как внешние ключи влияют на производительность запросов. Но как обычно это бывает при оптимизации, улучшая операции чтения, мы ухудшаем операции модификации. И тут точно также как и всегда главное придерживаться баланса и знать на сколько сильно оказывается влияние. Сегодня наша цель разобраться во влиянии внешних ограничений на операции вставки, удаления и обновления.

Читать далее ...
добавлено: 02 окт 11 просмотры: 2001, комментарии: 0



Влияние внешних ключей (fk) на производительность запросов

Многие считают, что оптимизация запросов штука сложная, и иногда это действительно так. Но с другой стороны есть очень много простых вещей, которые позволяют достигать внушительных оптимизаций, не требуя при этом каких-то сверх усилий. SQL Server довольно умный и он многое умеет. Поэтому главной задачей программиста, который оптимизирует запросы, является объяснение в понятных SQL Server-y терминах тех или иных взаимосвязей, которые он может использовать при построении запросов. И тут главное понимать, что от чего зависит, и как мы можем объяснять ему те или иные факты.

В этой статье мы поговорим о внешних ключах (foreign key). Итак, внешний ключ - это столбец или сочетание столбцов, которое применяется для установления связи между данными в двух таблицах. Всем хорошо известно, что внешние ключи необходимы для обеспечения ссылочной целостности. Мы же будем разбираться как внешние ключи влияют на производительность.

Читать далее ...
добавлено: 25 сен 11 просмотры: 3927, комментарии: 0