Когда стоит создавать индекс?

Многие слышали про индексы в базах данных, но обсуждение по поводу когда стоит создавать эти индексы встречается в просторах интернета не так уж и часто.
Этот урок как раз об этом.

Пікірлер: 105

  • @olegtotsamiy6588
    @olegtotsamiy6588 Жыл бұрын

    Владимир, спасибо вам огромное, за то, что дарите свет знаний нам, тёмным. Мне 40, переквалифицировался в программисты и учусь по вашим видео!

  • @heroic_saviors
    @heroic_saviors7 жыл бұрын

    Мужииииииик, ты вообще крут, большой большой большой респект тебе, где ты раньше был, я ещё раз и гораздо лучше все это понял ))))) Ждём твоих видео ))))))

  • @vladbushuev
    @vladbushuev Жыл бұрын

    Смотрел эти Мини-лекции ещё когда учился в школе, вот уже два года как выпустился из университета. В универе благодаря Владимиру экономил своё время перед экзаменами. Теперь работаю и иногда освежаю информацию в памяти. Спасибо вам!

  • @davidos533
    @davidos5332 жыл бұрын

    Спасибо, за достоверную информацию, всегда бьете прямо в цель и суть вопроса!

  • @faxtel7771
    @faxtel7771 Жыл бұрын

    Даже спустя столько времени актуально, спасибо! Хорошо объяснили, буду иметь ввиду и проверю все ваши советы

  • @polmaksim
    @polmaksim3 жыл бұрын

    Пожалуй лучшее видео о том, как и когда лучше использовать индексы. Благодарю!

  • @heroic_saviors
    @heroic_saviors7 жыл бұрын

    Расскажи пожалуйста про составные индексы и про очерёдность столбцов, хотелось бы ещё видеть как писать код

  • @AS-fk5fw
    @AS-fk5fw Жыл бұрын

    Это супер! Очень помогли при архитектуре БД и составлении схем в ORM, спасибо!

  • @alexeymalashenko8861
    @alexeymalashenko88615 жыл бұрын

    Молодец! Спасибо, за материал.

  • @andyanderson222
    @andyanderson2222 жыл бұрын

    Супер! Всё очень доходчиво, большое Вам спасибо!

  • @user-kf3wb6mb7k
    @user-kf3wb6mb7k Жыл бұрын

    Спасибо Владимир!

  • @user-ec6ot3zk1p
    @user-ec6ot3zk1p3 жыл бұрын

    супер видео! благодарю, кратко понятно. вопросы задают на собеседование. Я так понял, надо все запросы из программы собрать, после проанализировать какие поля в where используются и создать по ним индекс.

  • @testweb5425
    @testweb54254 жыл бұрын

    Спасибо! Вы очень хорошо объясняете!

  • @alukardishe
    @alukardishe8 жыл бұрын

    Отлично все объяснил! Спасибо)

  • @googleadmin4749
    @googleadmin47497 ай бұрын

    Спасибо, уложил мне и другим все в голове, от вас бы еще сравнение разных баз данных для разных задач )

  • @user-hk9ec1vl8v
    @user-hk9ec1vl8v8 жыл бұрын

    Спасибо! Хорошо объяснили. Будут ли видео о проектировании баз данных? Какие-то рекомендации на эту тему? Нормализации таблиц, денормализации, ведь это тоже с производительностью тесно свзяано, например много JOIN'ов не есть хорошо и.т.д.

  • @user-yr2zm7rd9e
    @user-yr2zm7rd9e4 жыл бұрын

    Спасибо за лекцию. Очень помогли

  • @artyomkorbut5623
    @artyomkorbut56233 жыл бұрын

    Отличное видео! Большое спасибо

  • @TheBenderbej
    @TheBenderbej4 жыл бұрын

    огромная спасибо! отличное объяснение! долго в голове не укладывалось

  • @andrew_b2r
    @andrew_b2r7 жыл бұрын

    Володя спасибо! Хорошо рассказываешь. Расскажи какие типы индексов использовать в каких случаях.

  • @aidamur
    @aidamur9 ай бұрын

    Коротко и по делу. Очень годно.

  • @MrBulat1
    @MrBulat15 жыл бұрын

    Спасибо!!!

  • @shmulful
    @shmulful8 жыл бұрын

    Спасибо!

  • @okaylooker
    @okaylooker4 жыл бұрын

    Большое спасибо за подробное разъяснение, а то я сам чуть все индексами не сделал ;)

  • @KostiantynNosach
    @KostiantynNosach4 жыл бұрын

    Спасибо, очень информативно

  • @cosmo_polit
    @cosmo_polit2 жыл бұрын

    спасибо за полезную информацию

  • @StepanVorobiov
    @StepanVorobiov Жыл бұрын

    Отличное видео! Спасибо

  • @kelevra1493
    @kelevra14932 жыл бұрын

    Спасибо дядька! Полезно.

  • @alex.mon1989
    @alex.mon1989 Жыл бұрын

    Супер! Чуть подробнее интересно было бы услышать про WHERE с операторами сравнения "больше" и "меньше".

  • @Nikki713100
    @Nikki713100 Жыл бұрын

    урок пушка, спасибо!

  • @eney1975
    @eney19754 жыл бұрын

    спасибо, давно искал такое простое объяснение

  • @qqryzka4736
    @qqryzka47363 жыл бұрын

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

  • @TEFTEJIb
    @TEFTEJIb3 жыл бұрын

    Спасибо очень наглядно, подскажи пожалуйста если делать инсерт новых строк то индекс на них индекс автоматом встанет? И ещё вопрос апдейт быстрее чем перезапись всей таблицы (более 10млн строк) ?

  • @KlenKlenov
    @KlenKlenov3 жыл бұрын

    Спасибо.

  • @it-ninja804
    @it-ninja8043 жыл бұрын

    Володя спасибо, я все понял понял)

  • @Adapt-wj5gi
    @Adapt-wj5gi5 жыл бұрын

    Отлично спасибо ! Частные уроки по скайпу проводите ?

  • @mamikonvartapetyan3189
    @mamikonvartapetyan31894 жыл бұрын

    Автор, немного серьезнее отнестись к тому, что говорите. Вы делаете акцент на том, что Having выполняется после в конце, но это не аргумент, т.к. Order by выполняется вообще последним, после Select, перед которым выполняется Having. И то что "для select нужно сдавать индексы, а для update нет" - это конечно тоже странное утверждение, учитывая что update - в используемом контексте это и select также, со своими возможными предикатами, для которых тоже используется индекс.

  • @SuperArtgun
    @SuperArtgun6 жыл бұрын

    Мужик !

  • @gpankov
    @gpankov Жыл бұрын

    Лучший!

  • @sergeymain4205
    @sergeymain42056 жыл бұрын

    Мне пока кажется, что для Join on в первую очередь нужно делать индекс. приоритетнее чем where.

  • @user-eb5es9un1m
    @user-eb5es9un1m2 жыл бұрын

    Добрый день! Команда CREATE MATERIALIZED VIEW AS SELECT вставляя данные в мат. витрину под капотом использует INSERT.? По сути она вставляет данные., значит это INSERT?

  • @user-ee1lx1pe7n
    @user-ee1lx1pe7n2 жыл бұрын

    Гений!

  • @Moonsters100
    @Moonsters1008 жыл бұрын

    Здравствуйте! Не знал, что индексы так же помогают в сортировке данных.. Скажите вот у меня в таблице есть поле, которое принимает id родительского комментария и соответственно может повторятся, и тут возник вопрос стоит ли его индексировать? просто всегда думал, что индекс должен быть уникальным. Спасибо.

  • @VladimirMozhenkov

    @VladimirMozhenkov

    8 жыл бұрын

    +Moon- -Ster Вы-же будете его использовать для JOIN-ов, так что скорее всего стоит.

  • @VladimirMozhenkov

    @VladimirMozhenkov

    8 жыл бұрын

    +Moon- -Ster Уникальность не обязательна ))

  • @php-b30
    @php-b303 жыл бұрын

    👍🏻👍🏻👍🏻

  • @user-jz8gh3ui7n
    @user-jz8gh3ui7n3 жыл бұрын

    Что поменялось спустя 5 лет? Советы индексирования остались те же? Или есть какие-то изменения?

  • @arahnid_9844
    @arahnid_9844 Жыл бұрын

    👍

  • @IPmen10001
    @IPmen100016 ай бұрын

    Подскаэите пжлста есть ли смысл создавать индекс для таблицы где всего две колонки форен кей

  • @gtbutcher379
    @gtbutcher3794 жыл бұрын

    Володя я тебя люблю

  • @Nodorgrom
    @Nodorgrom Жыл бұрын

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

  • @romanyuzhanin3541
    @romanyuzhanin35416 жыл бұрын

    а если я ищу не через оператор = ,а через оператор IN и поиск у меня происходит по нескольким полям IN(поле1, поле2)?

  • @tanataytkaliyev5206

    @tanataytkaliyev5206

    2 жыл бұрын

    А аналогом чего в sql является in? Ответив на этот вопрос, получите ответ на изначальный

  • @wamikgildiev6632
    @wamikgildiev6632 Жыл бұрын

    Вопрос: а если колонка часто используется в секции WHERE, но при этом так же часто подвергается UPDATE'у?

  • @kanakana7095
    @kanakana70954 жыл бұрын

    Здравствуйте!Вопрос такой , у меня поле при инсерте записи изначально null но потом апдейтится только один раз. Данное поле участвует в join.Стоит его индексировать ?

  • @dmitriist255

    @dmitriist255

    3 жыл бұрын

    Определенно да, если после апдейта не будет новых, а только участие этого поля в запросах на выборку данных (в т.ч. при джойнах).

  • @IndexRTS
    @IndexRTS3 жыл бұрын

    Объясните пожалуйста, для чего нужны связи, отношения. Не совсем пойму логическое для чено они нужны. Весь интернет заполнен этими связями а вот для чего они нужны не совсем понятно, никто не объясняет. Объясните пожалуйста

  • @blusterhash
    @blusterhash8 жыл бұрын

    Вроды бы для запросов с like вида "%something", "something%" и "%something%" index будет полезен

  • @tarasbmal

    @tarasbmal

    5 жыл бұрын

    Однозначно, коллега! )

  • @Doox911
    @Doox9113 жыл бұрын

    Топ

  • @user-ss4ck1dq6m
    @user-ss4ck1dq6m8 жыл бұрын

    Спасибо !!! Поставил индексы и скрипт стал выполнятся не 750 сек, а 10 сек )

  • @chuckchuck1090

    @chuckchuck1090

    3 жыл бұрын

    @unk unk ну мб там база на 60млн записей))) У меня на работе есть и больше

  • @SUBSCRIBERSWITHOUTVIDEO-eu3ir
    @SUBSCRIBERSWITHOUTVIDEO-eu3ir8 жыл бұрын

    Добрый день , можно узнать почему на этом видео стд лицензия ?

  • @VladimirMozhenkov

    @VladimirMozhenkov

    8 жыл бұрын

    +Иван Иванович Исправил. Если заметите такое ещё, дайте знать.

  • @user-pv1zw2oe5k
    @user-pv1zw2oe5k2 жыл бұрын

    Комментарий для продвижения видео

  • @forcemeat9726
    @forcemeat9726 Жыл бұрын

    если update с блоком where, то индекс будет задействован и тоже поможет)

  • @klerg321
    @klerg321 Жыл бұрын

    ээээ... это сколько кже лет посгри индексирует и лайк, и сравнения в зависимости от индекса?? (b tree)

  • @cruisecontrol1489
    @cruisecontrol14892 жыл бұрын

    почему сравнение больше/меньше менее эффективно чем равенство?

  • @gpankov
    @gpankov6 ай бұрын

    а если в ON есть операция >?

  • @stMrJerry
    @stMrJerry7 жыл бұрын

    При update/insert ты едва ли что-то теряешь при использовании индекса. Потеря константна. А вот при select ты очень много экономишь при использовании индекса. Экономия зависит от величины базы. И ради солнца, ставьте индексы на внешний ключ, всегда) История из жизни: выполнялась по cron'у раз в минуту одна процедура. Ну секунд 20-30 занимала, вроде норм. Шли месяца... Данных становилось все больше, и больше. Стало так много, что эта процедура стала занимать больше минуты. В итоге процессы не успевали закончитьься, как появлялись такие же новые. Больше процессов, меньше ресурсов - еще медленнее процедуры - еще больше процедур. Ну вы наверное уже поняли к чему я клоню. Сервер упал))) Сервер пролежал 7 часов! Пока все опомнились, пока сообщили нужным людям, а те другим людям, а те программистам, пока программист подключился, перезагрузил сервер, все поднял, обнаружил проблему, поправил... Так что не ленитесь ставить индексы!) Для сравнения, после добавления одного единственного индекса процедура стала занимать ~8 секунд! А там записей было не так много, немногим больше миллиона.

  • @keydon5661

    @keydon5661

    4 жыл бұрын

    Jerry Green так ваша история не про индексы, а про то что надо использовать flock, если команду стоит запускать в одном экземпляре

  • @VaeV1ct1s
    @VaeV1ct1s Жыл бұрын

    Зачем вы учите тому, в чём не разбираетесь? К примеру в постгрес, запросы where > =

  • @lastfornit
    @lastfornit3 жыл бұрын

    теория- это хорошо. хорошо объяснённая теория - ещё лучше. но без практики некоторый туман в понимании остаётся. прям, не хватает практического обучения SQL с нуля.

  • @user-xk8le4dv5n
    @user-xk8le4dv5n8 жыл бұрын

    Ролик конечно же полезный, но в нём не рассматриваются ситуации использования ORM, например Hibernate.

  • @user-xk8le4dv5n

    @user-xk8le4dv5n

    8 жыл бұрын

    +Beta Вот про эти запросы и следует поговорить. Ведь именно от них зависит, стоит или не стоит создавать индекс.

  • @user-xk8le4dv5n

    @user-xk8le4dv5n

    8 жыл бұрын

    ***** В ролике говорится про запросы, явно формируемые программистом. Как это делает ORM неочевидно.

  • @stMrJerry

    @stMrJerry

    7 жыл бұрын

    ну так это уже твоя задача знать какие запросы делает твоя ORM тем более что обычно ORM позволяет привести любое выражение к sql-запросу через специальный метод

  • @user-xk8le4dv5n

    @user-xk8le4dv5n

    7 жыл бұрын

    Jerry Green ORM для того и создавались, чтобы не заморачиваться SQL запросами.

  • @stMrJerry

    @stMrJerry

    7 жыл бұрын

    שלום עליכם ну так и не заморачивайся. Ваще забей на индексы, запросы, на все. Иди работай бухгалтером)

  • @Sweet-kc1oz
    @Sweet-kc1oz2 жыл бұрын

    Почему для like не нужен индекс? Наверно речь идёт о неопределенном начале строки? Like % ... % Для like ... % индекс ускорит работу

  • @GLOBALeVGENIUS
    @GLOBALeVGENIUS2 жыл бұрын

    Не очевидно, почему вдруг операторы сравнения исключают индексирование. B-tree целиком построено на сравнениях. Ощущение, что лектор не очень хорошо понимает, как устроены индексы.

  • @VladimirMozhenkov

    @VladimirMozhenkov

    2 жыл бұрын

    Не очевидно, потому что не исключают.

  • @GLOBALeVGENIUS

    @GLOBALeVGENIUS

    2 жыл бұрын

    @@VladimirMozhenkov в ролике сказано, что идексы похдходят только для случаев, где у нас сравнение на равенство, но не на больше / меньше

  • @CoricComPlus
    @CoricComPlus8 жыл бұрын

    Володя, я думаю, тебе нужно подтянуть теоретическую часть, исходя из досмотренного видео до 5:25 :) Это утверждение насчет того, что создавайте индексы только по тем полям, которые будут находиться в фильтре - морально устарело. Во-первых: все мы знаем, что индекс хорош при фильтрации (чтобы план выполнения не делал table scan, перебирая и блокируя записи, а делал seek, что к блокировке не приводит, и сразу имеется дерево для поиска ) Но он якобы плох при изменении данных, поскольку изменение данных будет выполняться медленно из-за изменения индексов. Значит, это может быть и было актуально, но лет 10 назад, когда были медленные диски, и RAM ужасно дорогая. Сейчас вычислительные можности позволяют, а многие теоретики даже рекомендуют (а я это на своей шкуре прочувствовал) ставить индексы на _все_ поля. Все - по шаблону, поскольку за нас уже все придумано: 1) В каждой таблице должно быть поле суррогатного первичного ключа (ID, даже если сейчас и не нужно) 2) В каждой таблице каждое поле должно быть проиндексировано - по индексу на каждое поле 3) Очень желательно иметь натуральный (даже составной) уникальный индекс, который служит для выделения сущности, и для поддержания обеспечения целостности. И забудем мы надолго овертаймы, падения производительности при очередном билде и т.д.: сегодня по этому полю where не ставится, а завтра - оно и попадет в фильтр. И че теперь - включать какой-нибудь tuning advisor чтобы он нам подсказал, где надо ставить индекс? А про то, что индекс на like не нужен - это неправда, которую две недели назад фиксил индексами (ечли чо - старючий MS SQL 2005) :)

  • @stMrJerry

    @stMrJerry

    7 жыл бұрын

    Тоже не понял прикола. Вроде бы sql запросы на то и сделаны, чтобы еще до непосредственно получения данных описать какие данные тебе нужны)

  • @CoricComPlus

    @CoricComPlus

    7 жыл бұрын

    Jerry Green sql - это структурированный язык запросов данных, а не описыватель каких-то метаданных :) да и select * from blablabla (очень плохой запрос) - "какие данные нужны" все зависит от источника данных, а если его расширяют - то изменится

  • @stMrJerry

    @stMrJerry

    7 жыл бұрын

    A. Z. ну а что есть "язык запросов"? Ты описываешь что ты запрашиваешь - после чего это получаешь. Не наоборот.

  • @CoricComPlus

    @CoricComPlus

    7 жыл бұрын

    Jerry Green Как-то безграмотно пишешь. Я не описываю, _что_ я хочу получить. Я описываю, _как_ я хочу получить. Посредством структуры запросов. Мы не говорим про структуры данных :)

  • @roman8745

    @roman8745

    4 жыл бұрын

    странно что никто за 3 года не написал не придерживаться мнения изложенном в этом комментарии. уже давно есть люди которые специализируются по database performance tuning и с ваших слов они уже как 10 лет никому не нужны так как можно установить индекс на каждый столбец отдельно. открою секрет но seek не всегда выполняется быстрее чем table scan (в некоторых случаях он лучше и выполняется намного быстрее), не говоря уже о композитных индексах которые также с ваших слов не нужны. сравните перфоманс insert/update таблицы с множеством атрибутов и данных с установленным индексом на каждый. при каждом изменении запроса и требований изменяется структура таблицы если это нужно,

  • @user-ur6wk7bi8d
    @user-ur6wk7bi8d Жыл бұрын

    Подытожу. Программист сам должен прикинуть что, как часто и зачем используется, вычислить в мозгу примерный баланс затрат времени на запись/чтение и выродить. Современные базы данных настолько интеллектуальны, что сами такого не могут. Это как дать им инструкцию вылить ведро воды на грядку. Это нужно найти ведро, найти где его наполнить водой, налить туда воды, принести к грядке и дать современной СУБД вылить воды. Т.е. 99,987259% трудозатрат выполнит все равно человек. СУБД гордо выльет воду! Программистов надо имхо убивать. А то их бесконтрольтное размножение приводит к распространению всяких опусов типа виндовс. Или линукс. Да почти всего. Си++ хоть вспомните. Или яву. Скрипт. В первую очередь конечно надо убивать сиобразов. Вот это пздц багогенераторы в сотой степени! (Любители бл..ть краткости, су..0 сестры таланта.) Генераторы "надежных" решений основанных на иерархических структурах кое как налепленного эклектичного говна на еще большем говне. Авианосцы пристроенные к дачному туалету.

  • @MELkey3
    @MELkey38 ай бұрын

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

  • @kutuzov13
    @kutuzov13 Жыл бұрын

    Спасибо!

  • @blusterhash
    @blusterhash8 жыл бұрын

    Вроды бы для запросов с like вида "%something", "something%" и "%something%" index будет полезен

  • @VladimirMozhenkov

    @VladimirMozhenkov

    8 жыл бұрын

    +Абакумов Андрей Здесь уже, на сколько я знаю, зависит от конкретной базы данных. Многие и такое могут оптимизировать. Например они могут использовать бинарные (или другие) деревья для ускорения поиска... и тд. Но вот например если вы уже используете регулярное выражение, тут я не знаю баз данных которые вам помогут.

  • @user-ro5qx8wi6e
    @user-ro5qx8wi6e3 жыл бұрын

    Спасибо!

  • @Boiko777
    @Boiko7773 жыл бұрын

    Спасибо!