ym104432846
Вставьте ссылку на видео из Youtube, Rutube, VK видео
Задайте вопрос по видео
Что вас интересует?
00:02:19
Типы данных CHAR и VARCHAR:
  • Тип данных CHAR фиксированной длины заполняет пустые символы до указанной длины, обеспечивая быстрое считывание.
  • Тип данных VARCHAR имеет переменную длину, требует дополнительной информации о длине строки, что замедляет процесс считывания.
  • CHAR рекомендуется использовать для данных постоянной длины, таких как коды стран и телефонные номера.
  • VARCHAR лучше подходит для данных переменной длины, например, имен и фамилий.
00:05:31
Работа с NULL-значениями:
  • NULL представляет собой неизвестное значение, которое нельзя использовать в арифметических операциях.
  • SQL-запросы с NULL могут включать фильтрацию, сортировку и агрегацию данных.
  • Для работы с NULL используются операторы IS NULL и IS NOT NULL.
  • Функция COALESCE позволяет заменить NULL на указанное значение.
  • Ограничения NOT NULL можно установить при создании таблицы или изменении структуры существующей таблицы.
00:19:12
Агрегационные функции COUNT(*):
  • COUNT(*) подсчитывает все строки, включая NULL-значения, в отличие от COUNT(колонка), игнорирующего NULL.
  • Использование COUNT с константой эквивалентно COUNT(*), поскольку оба варианта считают все строки.
  • Исторически COUNT(1) был быстрее в MS SQL Server до 2000 года, однако сейчас разницы в производительности нет.
00:20:41
Отличия группировки и оконных функций:
  • Оконные функции выполняют вычисления для каждой строки отдельно, в то время как группировка объединяет строки по указанным условиям.
  • Результаты группировки и оконной функции совпадают, если применяется DISTINCT и одинаковый набор условий.
00:25:53
Оптимизация запросов с использованием индексов:
  • Индексированное сканирование предпочтительнее полного сканирования таблицы, особенно при больших объемах данных.
  • Кластеризованные индексы обеспечивают более эффективное хранение и доступ к данным.
  • Параметры параллельного и последовательного сканирования влияют на производительность запросов.
  • Анализ стоимости (cost) помогает оценить эффективность различных подходов к выполнению запросов.
00:36:04
Подготовка к собеседованиям по SQL:
  • Важность подготовки к теоретико-практическим вопросам по SQL.
  • Примеры практических задач, связанных с производительностью запросов и анализом данных.
  • Рекомендации по решению проблем с производительностью запросов, включая использование индексов и анализ плана выполнения запросов.
0: Всем привет сегодня у нас уже 3 часть вопроса по собеседованию по sql, сегодня мы пройдёмся по так называемым теоретическо практическим вопросам.
1: Да, вот и в целом разберём, какие с точки зрения практики именно такой теоретической, устной вас могут спросить техлиды тимлиды.
2: Может даже рекрутёр на hr, скажем так, скрининге каком-то 1 да, задать эти вопросы в принципе в лет для того чтобы проверить и отобрать вас как специалиста на дальнейшие этапы.
3: Собеседований. Вот начну с того, что в 1 части своего видео я намахался, можно так сказать. Да, очень. Спасибо. Кстати, ребятам, которые мне
4: Написали об этом, что я запутываю вас. Блин, очень благодарю. Так что если вдруг вы увидели за мной какую-то ошибку, пожалуйста, скажите об этом мне, я обязательно в следующем видеоролике на
5: Этом акцентирую внимание. В 1 части видео я рассказывал про типы данных, а именно про varchar ичар. Так в чем же я там сказал? Неправильно, неправильно выразил свою, наверное, мысль или что-то такое, но
6: Суть в том, что я сказал, что длина если вы выполните, грубо говоря, команду лент по этим видам, то в чаре при типе данных char 10 у вас будет 10 символов, и это, конечно же, неправильно.
7: И это логично, что это неправильно. Так не должно быть. Вот я имел ввиду, что база данных будет содержать в себе. То есть как это поле.
8: Будет равна 10 байтам. Вот. То есть как-то так постараюсь выразить свою мысль сейчас, что размер ячейки будет 10 байт плюс. Мне также написали, что я слишком скудно вообще.
9: Про это рассказал могут спросить ещё и больше, вот поэтому сейчас немножко остановлюсь ещё раз на этих типах, то есть в чем разница между char, допустим 10, и varchar 10 в том,
10: Что char 10 добивает пустыми значениями до 10 байт. Варчар имеет в себе переменную длину, но надо понимать, что Чаровский тип данных считывание по чару будет быстрее, то есть, если мы
11: Говорим, что, грубо говоря, char имеет длину 10 символов, да? Ну, 10 байт, точнее не 10 символов, 10 байт, да, и, допустим, в Ачар мы тоже что-то заливаем в 10 байт.
12: Точнее в 10 символов, да, то он под капотом не будет Ровно там 10 байт, а он будет там 12 13 байт, потому что varchar надо иметь в себе ещё дополнительно информацию о том, сколько
13: Байт занимает эта строка. Ой, строка это значение. Вот поэтому, когда мы считываем таблицу, каждый раз, когда база данных начинает считывать,
14: Именно эти значения она сначала обращается.
15: Сколько символов ей надо считать, чтобы не залезть на другую уже колонку. Вот, а чар, он уже изначально знает, что эта колонн.
16: 10 байт, и ей не надо, соответственно, лезть никуда, искать эту информацию. Из за этого быстро считываются, где можно применять эти типы данных. Да, варчар, хорошо применять, если у вас переменные данные, например, но
17: Ограничены, да, то есть, например, фамилия, имя, отчество, да, там, от 2 букв до, там, 10, там, ну, разные бывают фамилии, да, имена и отчества, да, ну, грубо говоря, в среднем, там до
18: 30 символов точно такие фамилии как бы большинство таких фамилий а char где хорошо применять ну например если у вас какие-то определённые ограниченные данные с одинаковой длиной, там коды стран индексы какие
19: Да, номера телефонов там в России они постоянны, да, то есть там типа 10 символов, 5 символов, 3 символа, вот именно тип char хорошо применять именно в таких.
20: Колонках. Ну это, в принципе, все, что я хотел сказать, я думаю, как бы чуть чуть дополнил. А теперь мы перейдём, конечно, к сегодняшним вопросам. Это практические задания.
21: Не будем отходить от традиций. Да, вопросы на слайде ставите на паузу. Смотрите, что да, как сегодня у нас немного такой интересный будет формат вопросов. Вот сейчас все увидите.
22: Это задача на нуллы, какие могут задать, задать вам вопросы, связанные с пустым типом данных, да неизвестным типом данных, даже с неизвестными данными, то есть null это что-то неизвестное, это ничего.
23: Мы не знаем, что такое база данных. Не знает, что это такое и так далее. То есть какие вопросы здесь могут задать, это вопрос на любое арифметическое действие. Часто, часто, часто, я очень часто слышу, как будто это клише.
24: Какое-то это null + 5, то есть меня пару раз, конечно, и умножение спрашивали, и вычитание, но, блин, 99 всех процентов. Раз меня спросили, нул + 5, типа, чему будет равно вот.
25: Это 1, потом агрегация с нуллами. Как здесь будут? Какие вопросы здесь могут быть? Чем отличается, допустим, каунт звёздочка от каунт колонки, то есть
26: Такой вопрос. Фильтрация как отфильтровать нулы, типа что выдаст база данных, если вы напишите нул равно null, да, как пример, вот сортировка с нуллами, то есть как
27: Сортировать данные так, чтобы сначала нулы были в начале или в конце нулы были. И последний вопрос. Это как избавиться от нуло в таблице и как ввести ограничения null на таблицы, вот.
28: В принципе, в чем прикол сегодняшнего формата? Видео в том, что мы зайдём сейчас в песочницу и будем уже смотреть на примерах все возможные вопросы, про которые я только что говорил, если вдруг данная песочница не будет.
29: Доступно, то я здесь, в среде выложил весь код необходимый, вы его просто вставляете в свою
30: Субку выполняете, и вы получите в точности такие же ответы. Вот. Ну что, начнём с арифметическим действием, с нуллами, да.
31: Вот он ответ, вот он, соответственно, сам запрос, что здесь делается. И заодно мы, затя, здесь же посмотрим последний вопрос у меня был. Это как, типа, избавиться от нолов при фильтрации. Что
32: Здесь происходит колёс. Это такая функция, которая выдаёт 1 ненулевое значение вот в этих скобках. То есть я могу передавать сколько угодно данных и 1 не
33: Нулевое он вернёт. То есть, соответственно, если в таблице у меня во сколько там в 5 колонках будет единицы, то, соответственно, 1 значение это были нули. И, соответственно, если он
34: Вернёт значение null в конце, то, ну, он так и сделает, потому что все эти типы, да, все эти арифметические или не арифметические, но действия, да, потому что последнее это конкретизация строк.
35: Между собой оно не является арифметическим. Ну, скажем, вот эти действия, они возвращают null, то есть, соответственно, прибавляете, умножаете, делите или что-то подобное, вам вернётся нул. То есть и здесь вы, в принципе можете
36: Это увидеть, потому что возвращены единицы и, соответственно, возвращён, возвращён. Ну, в принципе, заходите сюда. Ну, как вариант, да, я more. Почему я так сделал? Потому что если я верну вот так вам строку,
37: И выполню, то здесь будет пустое значение и как бы непонятно, нул оно или просто там пробелы какие-то. Поэтому я решил сделать таким вот образом, что здесь могут спросить. Кстати, как вариант очень хороший.
38: Например, Пога в посгресе нету, функции, например, дифф 0, то есть деление на 0 любой неважно, и у вас могут спросить а как сделать так, чтобы, грубо говоря, деление на 0 возвращало пустое?
39: Значение, либо возвращала, ну, вообще просит пустое значение, да, чтобы не было ошибки. И вот надо, чтобы делитель ваш был равен нулю, это достигается с помощью таких функций, как null, иф, как вариант, да.
40: То есть подобных либо можно просто как стандарт sql написать кейс case when если колонка, которая вставляется делитель, равна нулю тогда null.
41: В противном случае вы возвращаете колонку энд. Все легко и просто так. Агрегация с нуллами это 2 действие. Тут у нас создаётся таблица, в которой есть нуллы.
42: На что стоит обратить внимание, что, когда мы выполняем каунт звёздочка, у нас считаются все значения в этой таблице нулы не нулы, без разницы, по всем строкам таблицы будут считаться.
43: Считаться строки когда вы пишите имя колонки, да, у нас это id, мы получаем значение 8, потому что не учитываются 3 значения улов.
44: То есть пустых значений, то есть, соответственно, 11 - 3 равно 8 сумма мин Макс, это, в принципе, все понятно, не учитываются нулы, здесь обязательно нужна колонка, поэтому мы не будем обращать на них внимание.
45: Вот, но очень интересный вопрос. Это с average. То есть, как вы можете увидеть, в данном случае эверейдж равен 5 12. Да, вот здесь я специально ещё в конец.
46: Вывел строки. То есть что здесь происходит, когда мы выполняем значение среднего значения по колонке. Соответственно, мы не учитываем знач.
47: Null. Это очень важно аналитикам, потому что у аналитиков это прям маст хэв вопрос. И прям часто достаточно его задают, типа как посчитать среднее значение по всем колонкам, ой, по всем строкам таблицы и
48: Соответственно, если вы посмотрите на предпоследнюю строку в ответе, да, варианты будут одинаковые, то есть мы сумм по id делим на аккаунт от id, то есть, соответственно, нулы не учитываются ес.
49: Нам необходимо посчитать там, например, конверсии какие-то, да, где нулы должны просто учитываться, потому что
50: Дальше. Не, ну как бы человек там не перешёл на страницу, не нажал купить там и так далее. Ну, по нему хотя бы 1 строка была, да, то необходимо писать вот следующее выражение.
51: Sum, соответственно, отойди делённая на аккаунт звёздочка. Либо есть ещё 2 вариант вы должны использовать, как я говорил уже про лес, где вы нулы заменяете нулём в принципе
52: И все, для чего здесь используется нумерик, я использовал, потому что если вы целое число поделите на целое число, у вас вернётся целое число, как пример, в принципе, могу просто продемонстрировать.
53: Вам это достаточно быстро, каллум равен 3, а это, соответственно, тоже неправильно. Поэтому в постгресе 1 из чисел обязательно должно быть десятичным. Назовём его так?
54: Следующий тип вопросов это про фильтрацию с нуллами тут вопрос вообще простецкий вам могут быть задать можем ли мы отфильтровать типа id не равно null, как это здесь?
55: У меня сделано, да. Можем ли мы вообще какие-то там, типа больше null поставить меньше нулл поставить, там равно null. Здесь просто надо сказать, что есть 2 у нулова, ть, только 2 решения, это, соответственно, мы их фильтруем, либо is null
56: Либо is not null, все, то есть либо является нулом, либо не является вот как пример из null, это та же самая таблица, да, здесь 1 числа нет, 6, потому что я там неправильно сделал. Ну ладно, не
57: Важно. Вот. И я здесь вывел роф намбер, чтобы было видно, да, вот они 3 значения нолов, 1, 2, 3 и, соответственно, 3 строки. Если мы выбираем из not null, то вы видите, что нет числа.
58: 4. Нет, числа 6, 7, 8, 9. То есть все остальные, видите, числа 10 нет. То есть, соответственно, 3 строки на love, как бы все логично. Вот здесь что происходит? Здесь я вывожу информацию о том, что
59: Вот это значение, чему оно равно оно будет равно null могут спросить в некоторых системах, могут вам субд выдать ошибку на это значе на такое неравенство пострес выдаёт значение null, то есть он не знает чему это равно.
60: Как пример. В принципе, если я это здесь пропишу, по идее, у меня будет здесь значение null.
61: Оп, вот это нулевые значения. И в принципе, вы можете как вариант тоже типа алес поставить, там, это в подзапрос проверить на нулевые значения, и у вас здесь будет именно null, ни тру, ни фолс.
62: Именно. Ну и здесь, соответственно, я также пользуюсь колесом. Если это возвращает нулевое значение, то тру тру равно true соответственно, везде он ставит, выводит все строки этой таблицы и везде проставляет вот это значение.
63: Как раз так. Сортировка с null значениями. Ну здесь тоже все очень просто. Вам могут задать вопрос, типа из разряда. А как отсортировать, чтобы в начале были нулы, либо в конце говорю,
64: За постгрес в других системах может быть по другому в кликхаусе такая же система, за там oracle, microsoft sql не знаю, и в гримами тоже самое, соответственно, коль в постгресе все тоже само.
65: Ну, first ну, lost lost, то есть в начале и в конце все легко и подобно изначально при создании таблицы или даже при создании колонки, мы задаём где должны?
66: Быть нулы. То есть, если колонка будет иметь нулы, мы можем задать это при создании таблицы, что при хранении в этой таблице нулы будут первые или будут последние. То есть вот эту сортировку
67: Вот как-то так. Это, кстати, влияет на тоже скорость чтения данных, если нулы в начале нулы в конце устроена сортировка и 3.
68: Вас могут спросить вопрос. Это, соответственно, как я говорил, как отфильтровать нули, ой как отфильтровать, как избавиться от нулей, от пустых значений. Вот это делается просто на самом деле, как я
69: Говорил колёс, да, ещё есть, конечно, в других системах, может быть там if null как вариант тоже, если null то, то, то либо кейс тоже никто его не отменял, если уж
70: Проходиться по стандарту, эскьюэль. Что я здесь делаю? Я сначала ввожу ограничения, ой, изменяю в таблице т. 1, которую я выше создавал на нули. Да, почему? Потому что как ввести ограничения?
71: На, ну если уже таблица создана, да, вот вам надо айдишник сделать так, чтобы был не нулевым, вы просто прописываете альтер тейбл, соответственно, альтер каллум. Какая и устанавливаете настройка нот. Ну все.
72: Теперь у вас у этой базы данных будет not null, здесь я опять удаляю таблицу, создаю опять же эту же таблицу нот нулл без каких-либо данных, но прописываю, что id это
73: Integer значение не нулевое, и, как вы можете увидеть, в конце выдаёт ошибку о том, что не поддерживает ограничение, то есть нарушается ограничение not null.
74: Кстати, про вот эти значения, которые, ну, lost я не показал, да, вот результаты, вот они первые 3 значения пустых, остальные идут. И здесь также 3 значения пустых по 10 строк. В принципе, это все, что у вас могут спросить, связанное с нуллами.
75: Так, возвращаемся к презентации. Ну, в принципе, все, залазьте, посмотрите, обязательно потыкайте сами, поменяйте там решение. В принципе, никто вам этого запрещать не будет.
76: Следующие вопросы, которые могут вам задать, это вопросы на агрегационные функции. Самый ходовой вопрос, который, не знаю, почему-то задают, чем отличается аккаунт 1 от аккаунт звёздочки, да? Ну в принципе, аккаунт звёздочка и аккаунт.
77: С колонкой мы уже посмотрели, в чем различие, да, то есть считается нулы, не считается. Нулы. Да, 3. Вот тут мне 1 раз задали этот вопрос, и мне он очень понравился.
78: Я считаю, что именно так и должны проходить или вообще подготовка к собеседованиям должна именно проходить у Лидов именно таким образом, как быстро посчитать количество строк в таблице, имеющую нормальную структуру, например, в 3.
79: Нормальной форме. Это я так завуалированно написал, но здесь что имеется ввиду под этим вопросом у вас есть большая таблица, допустим, в 30 строчек. Да, есть нормальная примари кей, да, ключ и есть куча колонок.
80: Там 30, 40, 50, 100. Неважно. Вы работаете в обычном там посгресе, да, потому что я собесился на посгрес в тот момент, и у меня спросили, как, типа, такая задачка с подвохом, как бы.
81: Быстро посчитать количество строк в таблице. Вот, конечно, я ответил, а, да, мы сейчас перейдём, короче, к этому вопросу. То есть, я надеюсь, понятно, что что здесь под вопросом имелось, если что, собесился в тенёк, вот в теньке такой
82: Вопрос мне задали следующий вопрос чем отличаются результаты запросов соответственно при группбае и оконной функции?
83: Вот опять же здесь такая ссылочка есть, код просто копируете из презентации вставляете его себе заходим. Кстати, не сказал, где же эту презентацию, презентация? Все это будет у меня на telegram канале все ссылки будут.
84: Telegram канале, к сожалению, YouTube пока мне не разрешает вставлять рабочие ссылки в комментарии под видео, поэтому кто хочет найти, то заходите, пожалуйста, на YouTube канал.
85: Да, на главную страницу моего канала и там будет рабочая ссылка на мой telegram канал в этом telegram канале как раз и будет все необходимые ссылки и на яндекс диск, где лежит эта презентация.
86: И на, соответственно, ссылки с этим, с этой песочницей.
87: Вот и не забывайте подписываться очень приятно, но на самом деле мне без разницы, подпишитесь ли вы или нет, но всегда приятно, что ты делаешь что-то нужное и что-то хорошее людям. Вот.
88: Ну так переходим различие между аккаунт 1, аккаунт звёздочкой и count кол. Опять мы создаём все те же самые таблицы, как и в прошлом задании, да, и я выполняю 3 запроса это explain лай, аккаунт, звёздочка, аккаунт 1 и аккаунт отойди.
89: Разница каунт от колонки соответственно, это то, что он считает нулы, а здесь не считает нулы. Но давайте посмотрим, в чем же разница между count звёздочкой и count, от 1 вы можете сравнить абсолютно 2 этих
90: Запроса и вы поймёте, что они ничем не отличаются. Вот прям реально ничем, за исключением, да, может быть там по времени запроса, но стоит смотреть на косты. В данном случае они абсолютно
91: Одинаковые. Вот. То есть получается, что вы можете любое константное значение поставить в count, хоть строку поставьте, у вас все равно запрос выполнится, правильно? То есть он будет подразумевать.
92: Аккаунт звёздочка, звёздочка это просто какое-то константное значение. Раньше, ещё до я решил так поискать в интернете, откуда вообще ноги растут от вот этого вопроса, да, и все-таки добиться. А где
93: И хоть какая-то инфа в чем различие этих 2 записей нашёл очень долго искал на самом деле нашёл статью про ms sql server каких-то там типа.
94: До двухтысячных годов ещё была разница между count звёздочкой и count единицей, подробно я там не расскажу, но это касалось
95: Того, что при count единицы было считывание чуть быстрее. Вот. Но, честно скажу, сейчас вы говорите, что абсолютно без разницы, какое константное значение.
96: Вы сюда подставите, да, и даже, блин, не ищите эту инфу. Вот не надо, она вам, она вам не нужна для собеседования, она никому не нужна. Вот вы просто говорите, что аккаунт, звёздочка, аккаунт, единица, аккаунт, строка, аккаунт ещё.
97: Че угодно вы скажете, это всегда константа, хоть каунт 0 поставьте. Вот следующий момент. Вот как раз мы переходим к интересной задаче.
98: Она у меня. А давайте мы сначала рассмотрим, чем отличаются результаты запросов. Да, хотя я честно скажу, что они ничем абсолютно не отличаются, потому что просто надо сказать, что при оконной функции выполняется дольше, но вопрос
99: Вас могут быть результаты. Именно вам даже на слух могут сказать приблизительно запрос могут написать в какой-то тестовой среде, показать, чем типа отличаются вот эти 2 запроса вы должны
100: Просто сказать, что ничем. Это как раз проверяется уровень на то, что вы понимаете, что оконная функция своё значение проставляет для каждого значения. И если вы поставите дистинкт в данном случае, да, при группировке и партишене, да, при 1 и той же колонке, грубо говоря,
101: Вы получите один и тот же результат, что и показывает как раз наш запрос. Ой, ой, ой, ой, ой, ой, ой, ой, соответственно, вот он 1 запрос, 10 строк, и 2 запрос при нуле восьмёрки девятки то.
102: При нуле восьмёрки, девятки, тройки. Все остальное будет одинаково. Если вы уберёте отсюда дистинкт. Соответственно, здесь строк будет сколько? 37. Вот, ну,
103: В принципе, как бы все сами потестите. И теперь мы переходим к интересной, на мой, опять же, момент, задаче, которую мне задали, как быстро посчитать количество строк в имеющее нормальную структуру. Ну, как пример, я вам
104: Объяснил, что это просто обычная нормальная таблица, где есть первичный ключ, где есть вторичные ключи, где есть просто обычные колонки, где, допустим, там в последней колонке лежит сыряк какой-нибудь, ну типа из разряда джейсона, как варианты.
105: Мельки абсолютно не важно. И для примера, ну просто эта таблица, достаточно много весящая. Здесь, к сожалению, в песочнице у меня не получилось создать таблицу, которая весит там хотя бы даже больше.
106: Там 100 мегабайт, но вы можете попробовать, в принципе, никто вам этого запрещать, конечно же, не будет. Вот, потому что он генерирует максимум 500 строк, 500000 строк, извиняюсь. Вот. И, короче, смысл какой?
107: Мы создаём таблицу, да, здесь создана таблица, здесь достаточно очень много строк колонок. Ну, типа 10 я сделал. Можете 20, 30 продумать, я просто был, скажу честно, лень такую создавать таблицу, но, в принципе здесь уже все видно.
108: Мы обновляем, соответственно, статистику и очищаем страницы данных и, соответственно, осуществляем пересобирание индекса, но, в принципе, оно здесь и не надо, оно бы и так работало, и, соответственно, мы строим
109: Вот на этот параметр не обращайте внимания. Смысл, короче, в чем там ещё? В условии, типа задача была, что у нас нормальный сервер, он там на ссдшках и так далее. Вот этот
110: Параметр отвечает за произвольное чтение страницы данных в кэш. И суть в том, что если вы работаете на харде, то есть, соответственно, базе надо залезть на hard, найти нужную страницу там типа даже не нужную, а как бы произвольную вот эту
111: Чтение, то у вас получается, этот коэффициент равен 4 0. То есть никогда база данных использовать его не будет, если у вас нормально настроенная система, и вы испо,
112: Пользуете ссд диск, то данный параметр будет равен 1 и 1. Вот есть ещё такой же параметр. Он о последовательном сканировании таблиц говорит, и он равен единице всегда вот при ссд вот эти
113: 2 параметра можно приблизительно приравнивать. Вот если мы используем хард диск такой жёсткий, металлический, которым убить ещё можно вот, то он равен 4 и это должно быть уже настроено изначально вашими
114: Администраторами баз данных. Вот что я здесь делаю дальше это считаю.
115: Хотел показать вам, сколько весит у меня таблица.
116: Ту, ту, ту, ту, ту. А я здесь походу не показываю. Нет, я показываю, но почему-то или не показываю. Нет, я не показываю, я не показываю, не показываю, не показываю сейчас.
117: 1 секундочку, я выполню вот эти 2 действия.
118: Вот здесь я вот не знаю, я перезапускал, он каждый раз мне будет пересоздавать это все или заново, что я хотел вам показать. Соответственно, это
119: 1, 2, 3 запрос мы удаляем инсерти. Да, к сожалению, он у меня ругается на что-то, на что-то, но суть в том, что здесь показано.
120: Показывается, что мне нужно, что мне нужно, когда я, получается, провожу эксплейн аналайз по примари кей, да, у меня по нему построен как бы ключ, то есть, соответственно,
121: У меня построен по нём даже кластеризованный индекс. Кластеризованный индекс это индекс, который, в котором отсортированы не только, не только сам индекс отсортирован, да, но ещё и отсортированы данные по этому индексу.
122: То есть в базе данных не надо постоянно смотреть, следить за тем, как идут данные в плане того, что не надо постоянно скакать от индекса к данным от индекс.
123: Данным и так далее. Он может просто считывать сами данные прямо прямолинейно и он будет, ну как бы молодечек здесь. Я хочу заметить, что у меня используется параллель секскан, то есть параллельная
124: Последовательное сканирование таблиц. Вот, к сожалению, это, ну, как бы долгий вариант. То есть он залазит в страницу данных и начинает с 1 страницы считывать эти данные. Вот я сейчас
125: Соберу ещё раз перезапущу этот запросик.
126: Ту, ту ту. Так, оп, оп, оп.
127: Вот что мы делаем дальше? В принципе, кстати, я мог это и показать сразу, но давайте не будем. Ладно уже. Что сделано, то сделано.
128: Мы создали таблицу, вот он её удалил, опять пересоздал, добавил 1000 заново сделал вакуум, и я показываю, что, грубо говоря, у меня таблица весит то 59 мегабайт. То есть, соответственно, если мы выбираем параллельное сканирование, да, последовательное сканиро,
129: Именно мы залазим в страницу и начинаем колбасить все 59 мегабайт, находя нужные данные, хотя первичный ключ да, весит всего 11 мегабайт.
130: А данные, я ещё раз говорю, это как бы кластеризованный индекс, данные и первичный ключ находятся одинаково, то есть последовательно. Намного легче считать данные из первичного ключа, чем
131: Считывать данные из всей, скажем так, таблицы целиком.
132: Поэтому здесь как бы это мы считаем, что это уже настроено, да, вот эти параметры, как я уже говорил, и смотрим, вот я выполняю команду эксплейн айс аккаунт id, да, по которому
133: Вот этот как раз индекс. И что мы видим параллельное индекс сканирования, при этом только индекс сканирования. То есть база данных лезет только в индекс и считывает только из индекса данные, что, соответственно, по косту.
134: Будет меньше. Вот как вариант ещё. То есть почему я сказал, что зря я добавил те данные можно было не увидеть. Вот я беру колонку, по которой не построен индекс и что я
135: Здесь вижу кост намного меньше. Ой, намного больше наоборот, да, что я здесь могу, как бы сказать, и время будет, соответственно, меньше, меньше. Почему?
136: Во 2 случае, но на самом деле особо не заостряйте внимание на вот этом времени. Почему? Потому что у меня таблицы приблизительно одинаковые, то есть различия
137: 50 мегабайт считать системе, которая, блин, считывает это по щелчку пальца, да, или считать 11 мегабайт. Приблизительно будет blink одно и то же время, тут время больше затрачено на передавание через шины какие-нибудь.
138: Там, ну, грубо говоря, у сервера данных. Вот. Но если, грубо говоря, вы найдёте таблицу, развернёте у себя докер, там, допустим, какой-либо, или просто на своей локальной машине развер.
139: Вернёте этот ооо, загрузите туда много гигабайтную таблицу, построите по этому первичному ключу индекс и так, что у вас будет там, ну, грубо говоря, даже здесь, да, ну там в 5 раз, допустим, различия у вас будет таблица весить 1.
140: Гигабайт, а ключ будет весить 200 мегабайт вот тут уже разница будет в считании, в считывании данных и в актуальности времени, в актуальности времени, но вы можете увидеть, что cost cost cost cost cost он различается.
141: И с индексом он работает быстрее. Это, кстати, вопросик про оптимизацию данных, да, почему не, не имеет никакого смысла изучать оптимизацию данных на уровне, когда ты
142: Ещё с данными не работаешь. То есть в компании, то есть стоит как бы просто изучить какие-то параметры определённые, типа, что такое параллельное сканирование, да, что такое последовательное сканирование, что такое индекс? Ну то есть какие-то ключевые моменты, но вникать
143: Откуда берутся вот эти косты, откуда берутся вот эти строки, там, типа, что такое? Ну, смысла как бы такого я не вижу лично по опыту могу сказать, когда вы приходите уже на реальную работу, когда у вас запрос не вот так.
144: Да, в 2 строки. А когда у вас запрос там, типа, в 50000 строк, там, ну ладно, я шучу в 50000, ну, грубо говоря, вот у меня был 1 запрос в 2000 строк. Вот. И ты такой, а у тебя вот эти косты уходят там за миллиарды.
145: Уже просто в каком-то промежутке запроса, да, тогда смысл есть лазить в этот, в оптимизатор и вообще вот на этом уровне уже изучать, как бы, что такое оптимизация данных в таблице.
146: Ну вот как-то так. Ну, в принципе, это все, что я хотел сегодня вам рассказать. Надеюсь, все вышло достаточно кратко и, к сожалению, я время не засекал, надеюсь.
147: Все было понятно, подписывайтесь на мой telegram, подписывайтесь на YouTube. Блин, это меня прям мотивирует работать. Дальше. Мне уже очень много ребят написало. Спасибо большое. Господи блин, пожалуйста ребят, все для вас, все для вашего понимания.
148: В следующей части мы поговорим тоже ещё, наверное, какую-то тему я занесу, например, про оконные функции. Может её и не будет. Возможно, я сделаю вопрос. Собеседование по эскюэль, которые никуда не подошли. Это тоже будут
149: Практические вопросы практическо теоретические, но к которым я не нашёл, знаете, к какой теме их привязать? Вот они просто как бы рандомные, на подумать там как пример просто у вас
150: Есть запрос, который выполняется 2 часа, а раньше он выполнялся 5 минут. Вот, типа, в чем проблема. Вот. То есть мы поговорим о вот таких уже вопросах на подумать. В принципе, очередной раз говорю вам спасибо большое, ребят, вы
151: И за вашу поддержку, за ваши просмотры.