Это видео недоступно.
Сожалеем об этом.
Оптимизация SQL запросов в Microsoft SQL Server - Индексы
HTML-код
- Опубликовано: 11 фев 2019
- Рекомендую также посмотреть видео: • Индексы баз данных - П...
Более новая версия этого видео: • Оптимизация запросов с...
В этом видео я начинаю разговор о том, как оптимизировать SQL запросы под MS Sql Server. Начнем с простого и базового понятия - статистики выполнения, на которую проще всего взглянуть и она очень часто сразу же говорит, что где-то скрывается серьезная проблема. Это не единственный показатель, но на мой взгляд один из основных. Помимо этого начинаем знакомится с индексами, возможные проблемы с неверными типами данных и т.д.
Я покажу, как создание индекса влияет на статистику и производительность, а так же как работает include колонок для индексов
Текстовая версия этого видео:
www.flenov.inf...
Мой ИТ блог www.flenov.ru и www.flenov.info
Мой просто блог blo.moe
Facebook: / mikhailflenov
Tweeter: / flenov
Инстаграмм: / mflenov
Телеграмм: mflenov
Обо мне - Михаил Фленов - блогер, программист, бывший автор журнала Хакер (рубрики Кодинг и FAQ) и автор нескольких книг по программированию и безопасности. Хакером не являюсь, но безопасностью интересуюсь, в основном в области Web. Живу и работаю в Канаде с 2009-го года, в течении 9 лет работал на Sony и отвечал за их крупнейший e-commerce веб сайт
ОБНОВЛЕННАЯ ВЕРСИЯ ЭТОГО ВИДЕО ruclips.net/video/-62RlA0erW8/видео.html
Михаил давно ждал это видео,а именно про оптимизацию базы данных, будем ждать ещё видео на схожие темы,а то снимаете уроки только для c# разработчиков,а за вами наблюдают не только с# разработчики)
Спасибо, пока видео смотрят и они вызывают положительную реакцию есть смысл продолжать.
Огромное спасибо, очень и очень рада что наткнулась на ваш канал , тема сложная но благодаря вашим примерам оказалось очень лёгким !!! 👍☀️
Спасибо за очень понятное, хорошо структурированное и проиллюстрированное изложение. Очень доступно
Подписался
Ставлю лайки под всеми Вашими уроками. Уроки класс и к стати самая понятная книга по С#
Спасибо! Помню Вас ещё по журналу ][акер..)
Не делает каст к varchar из за приоритета типов, неявный каст идёт от меньшего к большему. Поэтому идёт преобразование к nvarchar а не наоборот.
Тема индексирования изъезжена вдоль и поперек.. Интересно было бы послушать интересные истории про опыт работы с транзакциями, какие проблемы возникали, успешные решения, типа энд Трикс))
Полезно и все по сути без воды. спасибо, Михаил!
Спасибо за просмотр
хорошая подача, спасибо!
На другом канале есть более свежая версия - смотри здесь: ruclips.net/p/PLSn-RgjO4U6TAVsa9RWcGXrUdFUXM7weE
Благодарю Вас за этот труд и подаренный опыт!
Очень интересно, хотелось бы видеть как можно больше информации (практической) по sql.
Дай Бог вам здоровья!
Все, что касается sql и вообще практической информации переехало на мой канал Програмысли видеоуроки ruclips.net/channel/UCUNOyHuefhPZdHMebCffljg
Очень понравилось! Решил узнать что-либо о индексах, и выбрал это видео. Спасибо
У меня есть несколько видео на эту тему. Вот список www.flenov.info/video/category/SQL
@@programisli благодарю
Бомба. Надо будет еще не 1 раз пересмотреть. Спасибо.
Спасибо
Спасибо за уроки, Михаил! Очень полезно, все по делу.
П.С. Увидел фамилию и вспомнил, как еще в нулевых книги всякие выходили "... глазами хакера" ).
Спасибо, скоро планирую продолжить
@@programisli SQL глазами хакера?
оч круто респект и уважуха
Неплохое видео, без лишней воды. Лайк.
Спасибо, приятненько получать лайки
Изложение очень доходчивое, примеры достаточно хороши, чтобы понять суть.
Большое спасибо!
Хочу записать видео SQL vs NoSQL, т.к. последние 5 лет жил на разных NoSQL базах. Как думаешь, актуально?
Я думаю да
запиши как сделать так, чтоб один код в сайт, в exe и на смартфон и на линукс и на мак запускался , и шоб там бд была
@@user-bc8pr5up2r Очень непонятная формулировка вопроса. Но вобще .net core вполне работает на всех платформах.
От зрителя подтвержу, что актуально
Зачем спрашивал?)) ничего не записал)
Это просто вау, благодарю) Надеюсь на продолжение, тогда русскоязычные сайты станут немного(намного) быстрее)))
Помнится недавно канал перевалил за 1к, сейчас 3+. Круто!
есть еще два видео продолжения ruclips.net/p/PLqaIQ6A7Xiq02xS3Ii04uSDpKz76Wch35
update youtube set like = '+100500 к карме автора видео'. Очень полезная инфа😊
Спасибо
Спасибо, очень интересно было. С примером так вообще запомню))
Спасибо большое)
На канале видеоуроки более свежие версии подобных видео ruclips.net/channel/UCUNOyHuefhPZdHMebCffljg
На самом деле круто обьясняешь! Лайкос
а и пллюс подписка
Круто))
Спасибо, отлично объяснили, пойду проверять на бою и практиковаться))
Посмотри на новом канале более новую версию этого видео и там вообще по SQL много видео ruclips.net/p/PLSn-RgjO4U6TAVsa9RWcGXrUdFUXM7weE
Очень интересно смотреть
Спасибо
Спасибо!
P.S.
Пример был хороший. Информация усвоена))
Спасибо за просмотр
Сподобалось. Лайкнув :)
Спасибо, очень полезное видео.
На втором канале есть много по SQL, в том числе и перезапись этого видео в чуть более подробном варианте ruclips.net/p/PLSn-RgjO4U6TAVsa9RWcGXrUdFUXM7weE
Спасибо! Очень полезно и интересно
Спасибо, старался
Урок вроде простой но как дорого этот опыт дается, сколько времини ушло что бы до всего этого дайти самому. Новичкам я тоже обьясняю что индекс это по сути таблица где индексовые поля это кластерный примари кей которая хранит так же примари кей основной таблицы и поля которые указаны в инклуде и эту таблицу сиквел сервер джойнит неявно. И вся мощь реляционной базы данных как раз заключается в использовании индексов. Тогда становится понятно когда они нужны
Это старое видео. На другом канале у меня много теоретических видосов по базам ruclips.net/video/BPr1ZBEJ4lc/видео.html
И именно про индексы я говорил тут ruclips.net/video/vrnAkrH_Vts/видео.html там есть ещё видосы про оптимизацию, более свежие.
Мне очень нравится музыка у вас в видео, подскажите есть на какой-то площадке ваш плей лист?
Я уже не помню, где это я взял.
Причина скана - невозможно без потерь преобразовать nchar в char. Поэтому SQL делает cast(index_fld as nchar) и естественно мы получили скан индекса.
Эта проблема будет если поле содержит varchar, а поиск происходит по nvarchar. Вот тут уже печалька, нужно действительно вытаскивать каждое значение поля и превращать хранимые в базе данных значения в nvarchar и сравнивать, потому что иначе без потерь не обойтись.
Если мне не иизменяет память, в примере было наоборот - поле в nvarchar, а поиск ведется по параметру varchar. Так вот параметр можно без потерь превратить в nvarchar, а потом использовать индекс, но SQL Server этого не делает.
В видео именно база маде ин юс, с Чаром и орм которая нчар в параметр передавала.
С переменными в запросах вообще может быть всё плохо. Я уже давненько с БД не работал плотно, но если не изменяет память, в общих чертах, из-за переменных зачастую оптимизатору сложно построить правильный план запроса. Не знает что может придти в переменной (какие данные) и каково их распределение (физическое) в табличке. По этому может запросто уходить в полное сканирование.
С телефона некомфортно смотреть. Было бы хорошо в presentation mode показывать код т.к. информация отображается мелким шрифтом на 1/5 всей площади экрана.
Надо будет в следующий раз в Management Studio увеличить шрифт
+1
8:00 ну да, оптимизатор запросов может решить, что фулскан дешевле. Принимает решение на основе статистики и тех условий, что задают.
Посоветуйте хорошую книгу по SQL. Обычно использую ОРМ для работы с базой, но вот в глубоком понимании баз, есть пробел
Больша часть моей книги по Transact-SQL доступна бесплатно www.flenov.info/books/read/transact-sql. Ее можно купить и в электронном виде на litres кажется
Спасибо, интересно. 7 лет работал с Ораклом, а в ближайшее время придется столкнуться с MS SQL Server на новом месте. Удивлен тому, что индекс хранит значение индексируемого поля И primary key. В Оракле, например, хранится значение + rowID (уникальный идентификатор записи в БД).
А нельзя ли план запроса отображать как в оракле (в табличном виде)? i.stack.imgur.com/SsRfZ.png Гуглил немного, не понял, можно ли. А то для больших запросов удобнее табличный вид, на мой взгляд. Хотя, возможно, это лишь привычка.
Еще было бы здорово рассказать про партиционирование (секционирование) таблиц, плюсы и минусы. А так же про индексы в секционированных таблицах.
Так же стоит рассказать больше про уникальные/неуникальные индексы. А так же про составные индексы, как правильно по ним искать. Например если индекс по полям A, B, C, то запрос, в котором есть только условие, например, на B и C, не будет работать эффективно, т.к. упущено первое поле индекса. В оракле, например, это будет либо index skip scan, либо игнор индекса.
Ну и про хинты стоит рассказать, их опасность, вред и польза.
Вообще, если есть цель больше рассказать про оптимизацию, мне кажется стоило бы провести ликбез об индексах в общем, о методах доступа к данным, логические чтения из буфера/ физические чтения с диска (как я понимаю принципы те же, что и у оракла). Про полный скан таблицы, полный скан индекса, в чем отличие принципиальное. В данном видео это лишь косвенно затронуто - разница между index scan и index seek. Про случаи, когда полный скан таблицы может быть выгоднее, чем поиск по индексу (когда надо много данных выбрать). Про статистику и как она влияет на выполнение запросов. И много еще чего.
В общем тут можно много чего рассказывать. :)
Если быть точнее, кажется кластерный индекс хранится, просто это обычно первичный ключ. Кластерный индекс - это тот, по которому физически строки расположены на диске. Это пока введение, будет дальше более углубленная информация
@@programisli ясно. Ну вот по поводу введения, как мне кажется, можно (и нужно) чуть более обобщенную информацию дать, чтобы людям было понятно, почему тот или иной подход работает быстрее. Ну или дать ссылки на общую информацию по СУБД.
Дополнительную информацию можно найти здесь www.flenov.info/books/read/transact-sql
Только что проверил на SQL Server 2019. Сервер сам выполняет преобразование переменной и потом Index Seek.
Надо проверить 19
@@programisli там прямо в плане запроса видно скалярную операцию преобразования типа.
Добрый день! Прошу прощения что комментарий не в тему) но все же хочу спросить у Вас совета,есть ли смысл учиться на Веб разработчика из-за очень хорошей заработной платы(в этом моя мотивация) или же все таки нужно обязательно любить это дело и никак иначе? Благодарю заранее!
Конечно стоит, пока еще нет серьезной замены Web. Мобильные немного отвоевали, но Web все еще очень перспективный
а будет разница в производительности, если агрегатную функцию добавить в переменную, а не в селект?
Что ты имеешь ввиду? Пришли мне пример www.flenov.info/page/contactme
@@programisli ответил
Спасибо, все было понятно! Я сделала индекс для простого запроса, который обращается к одной таблице: CREATE INDEX IX_RABOTNIKK_TrudoemkostK_City ON RABOTNIKK (
TrudoemkostK, City
)
.
Но не могу понять, как сделать индекс для запроса, который обращается к 3-м таблицам? Вот как я начала:
CREATE INDEX IX_RABOTNIKK on RABOTNIKK[first_name], RABOTNIKK[first_name], ProektK[Trudoemkost] (
first_name, last_name, Trudoemkost
)
Индексы создаются на одну таблицу. Просто создай три индекса
@@programisli
Спасибо большое за ответ)) я как написала этот вопрос, то сразу сама сообразила:)
Спасибо вам большое!))
Утверждение, что seek всегда работает быстрее, чем scan в корне неверно.
Разве я сказал всегда? Если да,, то моя ошибка, зависит от данных. Возможно говорил относительно определенного запроса. О какой секунде идёт речь?
6:30 индекс покрывающий запрос. По этому за запросы с звёздочками надо бить по рукам.
продам первый комент
Ну хоть кто-то поставит диз ? ))))
Редко такое бывает, но без дизлайков иногда обходится. Может удалось записать полезно и интересно?
я так ничего и не понял... херовый с тебя объясняльщик
спасибо за отзыв