Увеличить скорость отработки запросов

196
15 декабря 2016, 15:59

Доброго времени!

Немного о задаче:

Необходимо реализовать выборку статей в зависимости от выбранного раздела:

Разделы имеют древовидную структуру с неограниченной вложенностью, в бд таблица разделов имеет поля id & parent_id, которые реализуют всю древовидность.

Сами статьи привязываются только к "конечным" разделам, которые не имеют подразделов.

Пример структуры разделов:

  • Раздел 1

    • Раздел 1.1
      • Раздел 1.1.1 (статьи здесь)
      • Раздел 1.1.2 (здесь)
    • Раздел 1.2
      • Раздел 1.2.1 (здесь)
    • Раздел 1.3
      • Раздел 1.3.1 (и здесь)

Т.е. если выбран Раздел 1, то нужно получить id Разделов 1.1.1, 1.1.2, 1.2.1, 1.3.1 и вывести все статьи, которые к ним привязаны. Проблема в том как это реализовано: Выбираются в начале айдишники детей Раздела 1, потом айдишники их детей, итого 4 запроса(в конкретном случае). Но на реальной базе в больших разделах до 100-500 запросов. Плюс выборка статьей по через section_id IN (массив из 100+ элементов) долгое занятие.

Вопрос:

Как увеличить скорость работы, т.к. страница в итоге загружается за 10-15 секунд.

Answer 1

Делаю так строю массив(дерево)загоняю в кеш потом...

Answer 2

Можно сделать так:

В табличку с разделами добавить поле path, которое будет содержать путь от корневой до текущей категории.

Например в твоем примере у каждого раздела id от 1 до 8. Тогда поле path для Раздел 1.1.1 будет таким 1-2-3 При клике на Разделе 1 все id дочерних разделов будут выбраны таким запросом:

SELECT *
FROM table
WHERE path LIKE "$id%";

Таким образом у тебя будет только один запрос)

READ ALSO
Составить запрос для таблиц со связью many-to-one

Составить запрос для таблиц со связью many-to-one

Здравствуйте! Помогите, пожалуйста, с запросомЕсть таблица Orders и Locations, между ними связь many-to-one

175
C#  и Mysql

C# и Mysql

Подскажите как работать в C# с MysqlЧто подключать, как подключатся к mysql и как искать в бд

140
Запрос удаления по значению checkbox

Запрос удаления по значению checkbox

Запрос удаления по значению checkbox - почему не удаляет? И как выдать сообщение, если не выбрали box

161
Неверный путь к файлу LOAD_FILE

Неверный путь к файлу LOAD_FILE

приветКак узнать правильный путь к файлу при загрузке файла в БД?

157