Я работаю над приложением, которое включает в себя следующие, как Twitter & Instagram. У меня есть вопрос относительно индексации таблицы подписчиков. Возьмите мои две таблицы MYSQL для ex.
users
- user_id
- username
...
followers
- id
- user_id
- follower_id
...
index(user_id,follower_id)
Я читал об индексах здесь: http://www.slideshare.net/billkarwin/how-to-design-indexes-really.
Насколько я понимаю, индексы отсортированы по крайнему левому столбцу в указанном индексе. Так что в этом случае его user_id и follower_id разбросаны по всей таблице?
*followers Table
id user_id follower_id
————————————————————--------
1 5 6
2 5 8
3 5 11
4 7 6
Поэтому, если я выполню простой запрос, приведенный ниже, он должен быть эффективным и позволит мне получать людей, за которыми следует пользователь x:
SELECT * FROM followers WHERE user_id=5
Однако что произойдет, если мне понадобятся люди, которые следят за кем-то? Например:
SELECT * FROM followers WHERE follower_id = 6
Насколько я понимаю, follower_id будет отсортирован только по порядку после столбца user_id. Следовательно, это происходит по всей таблице и вся таблица должна быть проверена?
Каков наилучший способ справиться с этим и что я неправильно понимаю?
Увидеть Вот.
Из вашего примера, этот пункт выделяется:
MySQL использует индексы для этих операций:
Чтобы быстро найти строки, соответствующие предложению WHERE.
Я бы индексировал оба user_id
а также follower_id
, с нормальным типом индекса.
Кроме того, не забудьте также прочитать об индексировании по нескольким столбцам, так как это может пригодиться для вашего сценария.
Других решений пока нет …