Допустим в таблице хранится миллиард записей о публикациях пользователей. Имеются следующие идексы: id (primary) и person_id (index). При помощи партицирования, разбил информацию каждых 10 пользователей -
PARTITION BY RANGE(person_id)
. Когда мне нужно получить последние 10 публикаций пользователя с id 7164, то я пишу так:
SELECT * FROM articles WHERE person_id = 7164 ORDER BY id DESC LIMIT 10
. Все отлично. Но что если я захочу получить дополнительно еще 10 записей? Тогда запрос выглядит так:
SELECT * FROM articles WHERE person_id = 7164 AND id < 478547641 (или позднее) ORDER BY id DESC LIMIT 10
и я получаю еще 10 записей, которые были сделаны раньше предыдущих. Имеет ли смысл добавлять еще один индекс:
ALTER TABLE articles ADD INDEX (person_id, id)
чтобы ускорить процесс получения дополнитеьных записей?
Я постарался объяснить ситуацию, надеюсь доступно.