Formula 1 in Code

Фильтр по тегу: оптимизация запросов




Подход доктора Хауса в тестировании оптимизации SQL-запросов (серия 3)

Запись моего выступления на SQA #14 в Львове. Еду на SQA #15 в Москву с продолжением. Жду всех, кому это будет интересно.

Смотреть тут ...
добавлено: 28 фев 14 просмотры: 2220, комментарии: 0





Подход доктора Хауса к оптимизации SQL-запросов (серия 1)

Как же долго я не писал в свой блог, но вот появился хороший повод возобновить эту традицию. Появились записи с моей встречи в CodeFreeze.

Смотреть
добавлено: 24 сен 13 просмотры: 3240, комментарии: 0



Введение в работу с XML в SQL Server

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

Но сначала эти самые данные нужно было где-то найти и желательно как можно больше, чтобы база получилась посложнее и на ней можно было показывать примеры статистики. Но ничего готового и действительно серьезного я так и не нашел :(. Максимум данных было на официальном сайте www.f1.com, там были результаты гонок с 1950 года. Но они были разбросаны по разным страницам и никакого единого файла для скачивания истории всех гонок. Ну что ж, пришлось писать маленькую программку, которая прошлась по всем этим страницам и написала нужный мне xml. Вот только его теперь ещё нужно было загрузить и распарсить в SQL Server-e об этом и поговорим в этой статье.

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



Влияние уникальных индексов на производительность запросов

Всегда ли вы задумываетесь об уникальности, когда создаете или модифицируете индекс? Признаюсь, что я сам частенько забываю об этом наиважнейшем свойстве. В этой статье я постараюсь доказать, что SQL Server-у очень важно понимать какие данные у него уникальные и покажу несколько примеров того, как он это знание использует.

Существует 2 способа объяснить SQL Server-y, что те или иные данные уникальны:
- уникальный индекс;
- уникальное ограничение (unique constraint);

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



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

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

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

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

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



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

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

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



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

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

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

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



Порядок соединений в запросе: миф или реальность?

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

Были выделены 2 фактора:
1) При большом количестве таблиц (более 8) это может повлиять на план выполнения
2) Может сократиться время компиляции запросов

Меня это удивило, так как я всегда считал, что главенствовать должна статистика. Более того не факт, что порядок таблиц в запросе будет совпадать с порядком операторов в плане, да и 8 таблиц мне показалось довольно маленьким числом, чтобы отдельно думать о порядке соединений при написании запросов. Ну раз это "любимая тема" MVP Дмитрия Костылева, а у меня нет причин не доверять его авторитетному мнению, то решил проверить я все эти факты на примерах, чтобы определить для себя раз и навсегда, важен или неважен порядок соединений в запросе, и если важен, то когда?

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