Оптимизация sql запросов

Attar
На сайте с 01.10.2011
Offline
29
774

Здравствуйте, пишу самописный движок, столкнулся с вопросом оптимизации так как проекты которые будут построены на данной кмс будут серьезные нужно чтоб быстро все работало и не нагружало сервер...

и так:

есть код


function getParents($id)
{
global $db;
$inc = $db->super_query(" SELECT id FROM `".PREFIX."site_content` WHERE publishedby='1' && parent='$id' ", 1);
foreach($inc as $k=>$v)
{
$this->getParents($v["id"]);
$this->res[$id ][] = $v["id"];
}
return $this->res;
}

он выводит ID всех категорий и под категорий, но в итоге на главной получилось около 20 запросов... подскажите как лутше сделать так как у меня или вывести масив и функцией обработать?

или может еще что-то полутше, и вообще если я выводу тока айдишники это не снижает нагрузку или не играет роли?

http://alteraweb.ru (http://alteraweb.ru), http://citycycling.ru (http://citycycling.ru) http://www.free-lance.ru/users/Attar/ (http://www.free-lance.ru/users/Attar/)
S5
На сайте с 04.01.2010
Offline
77
#1

Не играет роли, Вы каждый запрос дергаете базу. Попробуйте оптимизировать часть запросов на предмет 1 выборка - множественная обработка, обращений будет меньше -> дышать легче. + если движок самопис, на каждый запрос вероятней всего устанавливается соединение с бд, которое опосля разрывается. Попробуйте запросы выполнять в куче - законнектились, выполнили нужные операции, закрыли соединение.

В конкретном случае я бы наверно сделал общую выборку из базы, а далее пыхпыхом бы обрабатывал

php.developer
На сайте с 22.11.2010
Offline
94
#2

Не знаю Ваших задач, но часто проблему хранения деревьев решает nested sets.

Attar
На сайте с 01.10.2011
Offline
29
#3
sg552:
Не играет роли, Вы каждый запрос дергаете базу. Попробуйте оптимизировать часть запросов на предмет 1 выборка - множественная обработка, обращений будет меньше -> дышать легче. + если движок самопис, на каждый запрос вероятней всего устанавливается соединение с бд, которое опосля разрывается. Попробуйте запросы выполнять в куче - законнектились, выполнили нужные операции, закрыли соединение.
В конкретном случае я бы наверно сделал общую выборку из базы, а далее пыхпыхом бы обрабатывал

я использую класс который открывает соединение и закрывает его тока в конце выполненного кода... те. после генерации страницы ...

---------- Добавлено 14.06.2012 в 00:46 ----------

php.developer:
Не знаю Ваших задач, но часто проблему хранения деревьев решает nested sets.

спасибо, посмотрю, задача сделать вывод статей всех (корневые, и вложенные)

Attar
На сайте с 01.10.2011
Offline
29
#4

а что если закешировать, и брать из кэша, время жизни кэша сутки?

if (Если нет кэша или он устарел....)

{
$tmp = $this->getParents($parentsId);
foreach($tmp as $k=>$v)
{
foreach($v as $k2=>$v2)
{
$parent.= " OR parent='$v2'";
}
}
$cache->delete(Удаляем);
$cache->save($parent, Сохраняем);
}
A
На сайте с 29.12.2007
Offline
68
#5

Если не хочется использовать nested sets - получай все одним запросом, а дерево формируй в php. Ну и плюс кеширование )

clannad
На сайте с 22.05.2012
Offline
4
#6

мемкеш настройте на сервере

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий