Senior
44
Quelles opérations sont indésirables sur une grande table avec des dizaines de millions d'enregistrements ? Comment optimiser l'obtention du COUNT des produits dans une promotion à partir d'une très grande table ?
Entreprises à qui on a demandé
Réponse de l'IA
sobes.tech IA
Операции, которых стоит избегать на очень больших таблицах (десятки миллионов записей):
- Полные сканирования таблицы (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 = ?;
Если запрос всё равно медленный, стоит рассмотреть хранение количества товаров в акции в отдельной таблице и обновлять её при изменениях.