Как ускорить загрузку категорий на сайте SELECT From?
Добрый день товарищи, подскажите как ускорить работу сайта. PHP+MySql
В базе есть таблица Catalog c полями Категория, Бренд, Имя1, Имя2, Страна производства, Цена старая, Цена новая, Остаток. В таблице около 80 000 записей.
При входе на страницу категории идет запрос к базе "Select from" с указанием категории и перечислением полей, которые отобразить: Бренд, Имя2, Страна производства, Цена старая, Цена новая, Остаток > 1
Если в категории размещено до 200 товаров. Сайт загружает ее в течении 10 сек. После средствами html и css делает пагинацию, что позволяет листать цифры внизу 1,2,3 и т.д.
Фильтр в категории прекрасно работает и может искать по всем товарам (по брендам и по цене от и до).
Но если товаров 1600 в категории то загрузка занимает до 40 сек, что уже перебор.
Подскажите, как усорить, или что переделать?
P.S. Как временное решение раз в сутки, ночью. Все первые страницы категорий кешируются. И при входе на них открываются моментально, но при обращении к странице №2 и т.д. или при использовании фильтра, опять приходится ждать
Смена хостинга не решает проблему. Так как загрузка категорий на сайте медленно работает даже локально.
Дополнительно:
Вы что-то очень не так делаете. Обычная выборка 200 строк из здоровой базы данных - это вопрос нескольких миллисекунд. Даже сложная выборка 20 000 строк с объединениями и группировками должна укладываться в десяток миллисекунд.
Сделайте в селекте лимит на получение нужного количества товаров для одной страницы
Так же отдельно получите сколько всего товаров в категории и на этой основе стройте пагинацию
При переходе по страницам пагинации делайте запрос на получение товаров с лимитом и нужным офсетом
- если из 200 товаров лимитом вывели 80. То при использовании фильтра сортировать по цене или бренду, он будет работать только с этими 80 ?
- dizain-master, Смотря как фильтр и сортировка работают - по хорошему они должны быть так же на стороне запроса в бд и тогда никаких проблем не будет
Ответы:
Для начала настроить правильные индексы
Во-вторых, переходить на "настоящую" пагинацию, как Валерий написал, с лимит/оффсет
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Для ускорения загрузки категорий на сайте при использовании оператора SELECT FROM важно оптимизировать запросы к базе данных, а также структуру самой базы данных.
1. Индексация: убедитесь, что у вас правильно настроены индексы для столбцов, по которым вы выполняете запросы. Индексы помогут базе данных быстрее находить нужные записи.
CREATE INDEX idx_category_id ON categories (category_id); |
CREATE INDEX idx_category_id ON categories (category_id);
2. Оптимизация запроса: старайтесь писать запросы так, чтобы выбирать только необходимые данные. Избегайте использования оператора * и выбирайте только те столбцы, которые вам нужны.
SELECT category_name FROM categories WHERE category_id = 1; |
SELECT category_name FROM categories WHERE category_id = 1;
3. Кэширование: используйте кэширование, чтобы уменьшить количество запросов к базе данных. Можно кэшировать результаты запросов или целые категории.
4. Нормализация данных: проверьте, что ваша база данных нормализована и оптимально структурирована. Используйте внешние ключи и связи между таблицами для улучшения производительности.
5. Разделение запроса на несколько шагов: если запрос к базе данных слишком сложный, попробуйте разделить его на несколько более простых запросов. Это может ускорить выполнение запроса.
6. Использование кэширующих решений на уровне приложения: если база данных все равно работает медленно, можно использовать кэширующие решения на уровне приложения, например, Redis или Memcached.
Применяя эти методы, вы сможете значительно ускорить загрузку категорий на вашем сайте при использовании оператора SELECT FROM.

Для ускорения загрузки категорий на сайте при выполнении запроса SELECT FROM, можно применить следующие методы оптимизации:
1. Индексирование: Создание индексов на столбцах, которые используются в запросе SELECT FROM, поможет ускорить поиск данных. Например, если вы часто выбираете категории по их ID, то создание индекса на столбце с ID категории поможет ускорить запрос.
CREATE INDEX idx_category_id ON categories (category_id);
2. Использование кэширования: Можно использовать кэширование результатов запроса SELECT FROM для уменьшения нагрузки на базу данных. Например, можно кэшировать список категорий и обновлять кэш при добавлении или изменении категорий.
3. Оптимизация запроса: Проверьте ваш запрос SELECT FROM на предмет возможных улучшений. Используйте инструменты для анализа запросов и оптимизации, такие как EXPLAIN в MySQL, чтобы найти узкие места и улучшить производительность запроса.
4. Предварительная загрузка данных: Если у вас есть возможность, предварительно загружайте данные о категориях и храните их в памяти приложения. Это поможет уменьшить время выполнения запроса SELECT FROM, так как данные уже будут доступны без обращения к базе данных.
5. Отказ от лишних данных: Если вам необходимо выбрать только определенные поля из таблицы категорий, укажите их явно в запросе SELECT FROM, чтобы избежать извлечения лишних данных и ускорить выполнение запроса.
Применение вышеперечисленных методов поможет ускорить загрузку категорий на сайте при выполнении запроса SELECT FROM.