Индексирование - это процесс хранения значений столбцов в структуре данных, такой как B-Tree или Hashing. Это делает поиск или объединение запросов быстрее, чем без индекса, так как поиск значений занимает меньше времени. Sharding - это разделение одной таблицы на несколько машин. И для индексации, и для поиска необходимо выбрать соответствующий ключ.
Для больших таблиц вы должны учитывать как индексацию, так и разделение. Например, рассмотрим таблицу X, которая имеет 1 миллион строк. Если вы ищете ключ K в таблице X, обработка запроса перейдет непосредственно к строке R, которая содержит ключ, и вернет R пользователю. Если вы не пересекаете лимит хранения в большинстве случаев, вам не нужно осколковать таблицу. Если вы пересекаете лимит хранения, вы должны осколок. Нет смысла ограждать маленькую таблицу, так как это приведет к дополнительным затратам на сеть и агрегированию подзапроса.