Кто нибудь объясните мне про индексы в БД, я не вижу в них никакого смысла?
Начну с того что понимание зачем индексы для БД у меня имеются, но я не понимаю в них смысла.
В ChatGPT+Copilot я задавал вопрос, а смысла в индексах, если ты все равно при разработке проекта не можешь знать, какие данные будут самыми запрашиваемые для редактирования или для запросов.
И тут я стал изучать статьи про индексы как русскоязычные, так и англоязычные и наткнулся на несколько авторов, которые говорят что индексы надо ставить уже после того, как твоя база клиентов выросла, запросы увеличились и ты теперь должен вручную это прописывать.
Потом я прочитал что в век быстрых компьютеров, оптоволокна, быстрого более 1000мбит интернета и прочего, в индексах смысл теряется, и они могут замедлить работу твоей базы данных.
Теперь у меня какой то, диссонанс случился, одни говорят про великую пользу индексах, другие про никакой пользы, третьи про то, что индексы надо ставить уже после того, как запросы увеличились, но если ты неправильно пропишешь индексы, то можешь попрощаться с быстрой оптимизацией баз данных.
Есть ли вообще ситуации, когда при WHERE, ORDER BY, JOIN, MIN, MAX, COUNT и прочих таких функциях базы данных, даже при огромной нагрузке на БД, база данных отлично справлялась и без всяких индексов?
Dmitry Roo, это всё понятно, но тут говорят и про ssd m2, быстрые процессоры и прочего.
Если у ssd m2 чтение и запись от 1200мб/сек, то и на бд это должно влиять.
Psychedelic Geek, да и хоть в памяти вся БД пусть будет, один чёрт поиск по индексу на порядки быстрее перебора при сколь-нибудь значимых объёмах данных.
Вот вам христоматийная задача - у вас есть телефонный справочник города вида ФИО - номер телефона.
В справочнике 1М+ записей.
Вам нужно найти номер телефона по имени.
Сколько вам потребуется времени на поиск по несортированному, неиндексированному списку в худшем случае?
Надеюсь, вопросов насчет необходимости индексов БД у вас не осталось.
Это когда ты знаешь, какие данные тебе нужно сортировать.
При маленькой базе данных, индексы никакого толка на скорость не влияют.
Индексы влияют на количество записей от 10 тысяч, а до 10 тысяч пару мсек разницы не сделают.
Тогда индексы надо ставить на все столбцы, если уж сортировать данные, то прям клепать индексы на все столбцы где нужно сортировать, считать и прочего.
Тут же говорится, что индекс в БД полезен только при больших объемах данных, на старте проекта или до тех пор пока клиентов прибавится и запросы увеличатся, индекс вообще может только затормозить работу бд.
Мое желание понять, ставить ли индексы при разработке проекта, когда данных то может и не быть практически, либо пихать их во все столбцы где нужно where, order by, count, join,min и max запросы делать.
Psychedelic Geek, в маленьких табличках, действительно, можно и без индексов обойтись.
С остальными можно, например, посмотреть статистику запросов.
У вас может быть, например, медленный запрос, но который выполняется раз в сутки - его, возможно, и не стоит оптимизировать, а могут быть например запросы, которые в секунду выполняются тысячи раз - для таких запросов оптимизация выполнения будет очень важна.
Тогда индексы надо ставить на все столбцы, если уж сортировать данные, то прям клепать индексы на все столбцы где нужно сортировать, считать и прочего.
да где такое написано? как можно было прийти к такой дичи?
если ты все равно при разработке проекта не можешь знать, какие данные будут самыми запрашиваемые для редактирования или для запросов.
Почему это не знаешь? Это вполне себе анализируется на этапе бизнес-требований. Конечно потом индексы можно и нужно пересматривать, но и в начале вполне это может быть понятно исходя из ТЗ.
Потом я прочитал что в век быстрых компьютеров, оптоволокна, быстрого более 1000мбит интернета и прочего, в индексах смысл теряется, и они могут замедлить работу твоей базы данных.
В век быстрых компьютеров еще и растет само по себе количество информации. И потребность оптимизации никуда не делась. К тому же - это бизнес - так что если добавив индекс можно сэкономить на инфраструктуре - то кнчн лучш едобавить индекс, а не вкидывать бабки в дорогое железо.