Мне интересно, что более эффективно и быстро в производительности:
Имея индекс на одной большой таблице или несколько меньших таблиц без индексов?
Поскольку это довольно абстрактная проблема, позвольте мне сделать ее более практичной:
У меня есть одна таблица со статистикой о пользователях (20 000 пользователей и около 30 миллионов строк в целом). Таблица содержит около 10 столбцов, включая user_id
, actions
, timestamps
и т.д.
Наиболее распространенными приложениями являются: Вставка данных с помощью user_id
и извлечение данных с помощью user_id (SELECT
утверждения никогда не включают несколько user_id's
).
Теперь у меня есть INDEX
в user_id
, и запрос выглядит примерно так:
SELECT * FROM statistics WHERE user_id = 1
Теперь, когда все больше и больше строк, таблица становится медленнее и медленнее. Операторы INSERT
замедляются, потому что INDEX
становится все больше и больше; Операторы SELECT
замедляются, ну, потому что для поиска требуется больше строк.
Теперь мне было интересно, почему бы не иметь одну таблицу статистики для каждого пользователя и изменить синтаксис запроса на что-то вроде этого:
SELECT * FROM statistics_1
где 1
, очевидно, обозначает user_id
.
Таким образом, не требуется INDEX
, и в каждой таблице гораздо меньше данных, поэтому операторы INSERT
и SELECT
должны быть намного быстрее.
Теперь мои вопросы снова:
Есть ли какие-либо недостатки реального мира для обработки большого количества таблиц (в моем случае 20 000) вместо использования одной таблицы с INDEX
?
Будет ли мой подход на самом деле ускорить работу или может быть поиск таблицы в конечном итоге замедлит работу больше всего?