table_rows
это число строк в таблице. Этот номер является точным для MyISAM, но только приблизительный для InnoDB. data_length
- номер байт в части данных таблицы. Для InnoDB это включает в себя PRIMARY KEY
. index_length
- это число байт (не строк) для индексов (исключая PK, если InnoDB).
Если у вас большое количество индексов, index_length может быть больше, чем data_length. Это ключ, что у вас может быть слишком много индексов, но это не обязательно «плохо».
Каждый индекс хранится как независимый бит. Когда вы добавляете другой индекс, вы получаете еще один бит; это не влияет на производительность существующих индексов.
Ваши таблицы имеют несколько миллионов строк; это означает, что каждый уровень БТР составляет около 4 уровней. Если таблица вырастет до миллиарда строк, ее BTrees вырастет примерно до 5 уровней. Это незначительно.
Деградация может произойти, когда ситуация становится больше. Но это не так просто.
Пример 1: Ваши данные имеют индекс datetime или auto_increment PRIMARY KEY, и вы всегда смотрите только на «последние» строки. В этом случае, вероятно, «рабочий набор» достаточно мал, чтобы вписываться в ОЗУ. Вы не заметите снижения производительности, поскольку индексы & растут.
Пример 2. Некоторые запросы требуют сканирования всей таблицы или всего индекса. Это разрушает кеш, и производительность падает с обрыва.
Пример 3: Указатель на UUID. Это очень случайный индекс. «Следующий» UUID, который вы вставляете или выбираете, не будет иметь отношения к другим, которые вы недавно затронули. Следовательно, вам, скорее всего, понадобится попасть на диск, когда данные/индекс слишком большие для ОЗУ. Здесь производительность постепенно ухудшается.
Я считаю, что снижение производительности представляет собой комбинацию размера данных/индекса, шаблонов доступа, размеров кеша и размера ОЗУ. Не только цифры, на которые вы смотрите.
Индексы основаны на строках данных, а не на таблице. –
«Также существует ограничение на длину индекса, прежде чем вы начнете быстро ухудшаться в производительности» --- да, есть. Как только он не впишется в память целиком. – zerkms