Подскажите, какой вариант триггера оптимальнее или как протестировать это дело в phpMyAdmin?
Предыстория - БД InnoDB, в таблице products 2'000'000 строк, для отображения с сортировкой и пагинацией по 24 товара из текущей категории запускается следующий алгоритм:
1. первый запрос подсчитывает кол-во товаров в текущей категории, стандартным COUNT(*) с добавлением WHERE "текущая категория" по всей таблице products, запрос нужен для формирования ссылок пагинации
2. второй запрос получает набор ID товаров, согласно условиям сортировки
3. третий запрос получает полные данные по этим 24 товарам через IN
1-й запрос самый тяжелый, хоть и самый простой - 400мс - поэтому решил получать кол-во товаров для текущей категории не запросом в огромную таблицу с 2'000'000 товаров,а в новую таблицу, где для каждой категории будет хранится одна строка с числом, а записывать-обновлять в эту таблицу триггером.
Вот и вопрос - обновлять число товаров оптимальнее через counts=counts+1 или же запускать подсчет при каждом добавлении нового товара через пробежку по всей таблице товаров через COUNT(*)
? Вроде бы первый вариант более скоростной, но что, если добавлять товары будет несколько пользователей, например, этих пользователей около 10'000 ? БД будет формировать очередь или наступит хаос? А что если импортировать сразу пачку товаров, например, 20'000 товаров за раз, как тут будет вести себя БД?
Фух,ну и простыня,сорри)))
Вот этот запрос-тормоз
UPD. Как подсказали два уважаемых человека, спасибо им, нужен индекс на участвующие в запросе поля.
Запрос: EXPLAIN SELECT SQL_NO_CACHE COUNT(*) FROM
productsWHERE active=1 and category_id=1
Для одного индекса и для пяти индексов результат одинаков, в итоге время снизилось с 400 до 200мс.
Тоже не густо... Что еще предпринять-то?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите пожалуйста, как предотвратить временного зависания скрипта во время работы циклаНасколько я знаю, нельзя параллельно работать...
Как реализовать плавное выдвижение блока с помощью Jquery? Но нужно не просто скрыть/показать, а изначально должна быть видна верхняя часть...