Мне тут довелось общаться со специалистом по базам данных MS SQL Server и из разговора вышло, что он противник индексов. По его мнению, индексы – это практически зло, потому что они замедляют вставку и обновление данных.
Мне нужно было создать индекс на одну колонку таблицы информации о сессиях пользователей. Каждый раз, когда пользователь входит в систему, в базе создается новая запись о сессии и она может обновиться, если пользователь выходит из системы. Одна операция вставки и возможны редкие операции обновления. Чтобы эти операции не затормозить, мне не давали создать индекс, хотя в базе до этого вообще не было ни одного индекса.
Да, индексы могут затормозить операции вставки и обновления, но их не стоит боятся. Один или два индекса на таблицу – это вообще норма. Если у вас четыре или более индексов, то вот тут уже можно думать, а стоит ли создавать еще один, или использовать уже существующий.
Опять же, приведу пример со своей предыдущей работой – SonyRewards. Это сайт, на котором раньше были игры Wheeloffortune (в России это поле чудес) и Jeopardy (что-то типа умников, забыл, как в России называется подобная игра). За каждый ответ в игре довались поинты и вопросы в игре были такие же, как и в телевизионной. В общем, как только телевизионная передача заканчивалась, зрители могли пойти на сайт и ответив на вопрос получить 10 поинтов (10 центов в кошелек, который можно было использовать тут же на сайте). Сейчас поинты уже не даются за wof, а игру jeopardy закрыли уже года 4 назад.
Представьте себе, что миллионы зрителей увидели передачу Якубовича, и идут на сайт просто ввести в одно поле последний ответ на вопрос. Просто. И в течении часу после игры создавался огромный траффик, в результате которого в системе банка поинтов создавалось огромное количество записей о транзакциях. Так вот, на таблицах с миллиардами записей у меня было по четыре индекса и записи вставлялись с невероятно большой скоростью и никаких проблем не было даже 7 лет назад на том железе.
Для меня все эти индексы были необходимы и имели смысл, потому что вставляем запись только один раз, а потом можем запускать десятки запросов на поиск данных для того, чтобы узнать баланс пользователя, какие транзакции еще не устарели. Да, это была еще одна моя головная боль – если в банковских системах деньги пришли и никуда не уходят, пока их не потратят. Тут деньги могут потратить или они могут устареть. Там целая логика, сколько времени поинты живут активными, чтобы подтолкнуть пользователя использовать их, а не накапливать.
К чему я это? Не бойтесь создавать индексы. Если на таблице больше select запросов, чем вставки данных, то пользы от них больше, чем вреда.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Что-то я уже не первый раз от Михаила тут читаю о перлах местных специолистов. Задорнов был таки прав?
Kastor
Не совсем. Один человек взял болт с гайкой и долбил его до посинения, до пенсионного возраста, а другой человек долбит ключ к этому болту. Потом годам к пятидесяти их столкнули лбами.... Так рождаются открытия. И рожденные нобели не в пользу России.
Каждый несет свОй чемодан.
А как без индексов жить? это вообще реально на более менее больших таблицах (при условии, что нет NoSQL) ?
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.