> Как разделить большую таблицу по студентам для оптимизации запросов (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
Для оптимизации запросов по студентам в большой таблице можно использовать партиционирование (секционирование) по ключу студента. В Go с PostgreSQL это делается через декларативное партиционирование таблицы.
Пример: создаем таблицу student_grades с партициями по student_id (например, по диапазонам или хэшу):
SQLCREATE TABLE student_grades (id SERIAL,student_id INT NOT NULL,subject TEXT,grade INT,PRIMARY KEY (id, student_id)) PARTITION BY HASH (student_id);CREATE TABLE student_grades_0 PARTITION OF student_gradesFOR VALUES WITH (MODULUS 4, REMAINDER 0);-- ... аналогично для remainder 1, 2, 3
В Go-коде запросы остаются неизменными, но PostgreSQL автоматически направляет их в нужную партицию:
GOrows, err := db.Query("SELECT * FROM student_grades WHERE student_id = $1", studentID)
Дополнительные оптимизации:
- Используйте индексы на
student_idвнутри каждой партиции. - Для частых запросов по одному студенту - кластеризация данных по
student_id(например,CLUSTER student_grades_0 USING idx_student_id). - Если партиционирование невозможно, добавьте составной индекс
(student_id, id)и убедитесь, что запросы фильтруют поstudent_id.
Важно: избегайте сканирования всех партиций - всегда указывайте student_id в WHERE. В Go используйте параметризованные запросы для защиты от SQL-инъекций.
> Похожие задачи по Go
Используете ли вы воркерпул для ограничения количества горутин в Go
Какие джойны и группировки используются для подсчета количества людей по адресам
Как масштабировать Kafka при высокой нагрузке
Кто пишет миграции в проекте
> Похожие задачи по backend
Используете ли вы воркерпул для ограничения количества горутин в Go
Какие джойны и группировки используются для подсчета количества людей по адресам
Как масштабировать Kafka при высокой нагрузке
Кто пишет миграции в проекте
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью