Назад к вопросам
DNS
Senior
4
Какие операции нежелательны на большой таблице с десятками миллионов записей? Как оптимизировать получение COUNT товаров в акции из очень большой таблицы?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Операции, которых стоит избегать на очень больших таблицах (десятки миллионов записей):
- Полные сканирования таблицы (Full Table Scan) — например,
SELECT *без индексов. - Массовые обновления или удаления без фильтрации —
UPDATEилиDELETEбез WHERE могут блокировать таблицу и долго выполняться. - Агрегации без индексов —
COUNT(*)илиCOUNT(товар)без подходящих индексов приводят к долгому сканированию.
Для оптимизации подсчёта количества товаров в акции из большой таблицы:
- Использовать индексы по колонкам, участвующим в фильтрах (например,
акция_id). - Поддерживать агрегированные данные в отдельной таблице (materialized view или кэш), обновляемой при изменениях.
- Использовать партиционирование таблицы по дате или другим критериям, чтобы уменьшить объем данных для сканирования.
- Использовать специализированные счетчики или счетчики в памяти (Redis, Memcached) для быстрого доступа.
Пример запроса с индексом:
CREATE INDEX idx_promo_id ON products(promo_id);
SELECT COUNT(*) FROM products WHERE promo_id = ?;
Если запрос всё равно медленный, стоит рассмотреть хранение количества товаров в акции в отдельной таблице и обновлять её при изменениях.