Производительность. 2 варианта решения.

KPD

Новичок
Производительность. 2 варианта решения.

Сижу тут разбираюсь как сделан PHPBB.
Потому как интегрирую его в сайт, конкретно присём.

И заинтересовал меня слудующий момент.
Все наверное знают что в PHPBB, у пользователей есть ранги, к рангу относится ещё и картинка.
Так вот, я посмотрел как сделано в PHPBB вывод топика (темы).

Значала делается запрос и вынимается вся информация о рангах - записывается в массив. ranks

Потом делается запрос и из 2-х таблиц вынимаются данные о пользователе (имя, айдишник ранга и тд...) и о посте данные тож пихаются в массив posts

А потом идёт цикл по массиву posts в котором выводятся все посты.
А чтобы вывести ранг пользователя в циле по posts есть ещё один цикл, который бежит по массиву ranks до тех пор пока не найдёт соотвествие межну айдишником ранга в posts и айдишником в rangs.

Вот у меня вопрос может лучше сделать 1 запрос из 3-х таблиц и сразу получить инфу о рангах.

Кто что думает по этому поводу?
 

alexhemp

Новичок
KPD

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

KPD

Новичок
вообщем то я тоже так думал.

просто получается слишком громоздкий код.
2 запроса к базе.
потом бугать по массиву ещё...

а так можно одним запросом все решить - сразу запихать всё в 1 массив, и пробежаться по нему 1 раз циклом и вывести всё юзеру. по моему проще и красивее.

может я в чём-то ошибаюсь?
 

su1d

Старожил PHPClubа
не понимаю, а зачем бегать по массиву рангов?
ведь ИД ранга -- уникально, значит его можно сделать ключом массива.
тогда и бегать не надо. достаточно лишь сделать
PHP:
if(isset($rang_array[$rang_id])) { ... }
 

KPD

Новичок
Originally posted by SiMM
А тебе не всё ли равно? Это же не твой код и он уже написан.
понимаешь в чём дело.
у меня на сайте будут новости.
к новостям можно писать комменты.
писать могут только зарегистрированные пользователи - те которые зарегистрированы на форуме, ну и соотв я хочу выводить всю инфу о пользователе. в том числе и ранг:)

а задача считай таже - как и при выводе топика.
вот я и задумался....

-~{}~ 21.01.05 14:17:

Originally posted by su1d
не понимаю, а зачем бегать по массиву рангов?
ведь ИД ранга -- уникально, значит его можно сделать ключом массива.
тогда и бегать не надо. достаточно лишь сделать
PHP:
if(isset($rang_array[$rang_id])) { ... }
об этом спроси у разработчиков PHPbb мне самому непонятно

вот кстати этот кусок кода

PHP:
for($i = 0; $i < $total_posts; $i++)
{
 ......

if ( $postrow[$i]['user_id'] == ANONYMOUS )
	{
	}
	else if ( $postrow[$i]['user_rank'] )
	{
		for($j = 0; $j < count($ranksrow); $j++)
		{
			if ( $postrow[$i]['user_rank'] == $ranksrow[$j]['rank_id'] && $ranksrow[$j]['rank_special'] )
			{
				$poster_rank = $ranksrow[$j]['rank_title'];
				$rank_image = ( $ranksrow[$j]['rank_image'] ) ? '<img src="' . $ranksrow[$j]['rank_image'] . '" alt="' . $poster_rank . '" title="' . $poster_rank . '" border="0" /><br />' : '';
			}
		}
	}

.....
 

Фанат

oncle terrible
Команда форума
2 запроса к базе.
потом бугать по массиву ещё...
КПД, вот я не понимаю, правда.
Скажи, в чем громозкость КОНКРЕТНО?
скажи, а если ДОПУСТИМ, в какой-то задаче булдет всего один запрос, но исполняться будет он 10 секунд - это не громоздко будет?
а твои два запроса и пробег по мизерному массиву, которые исполняются сотые доли секунды - это громоздко?

Как можно судить по таким вещам о громозкости?
 

KPD

Новичок
ну я вот и хочу понять, что будет лучше сделать
1 запрос к 3 таблицам

или сначала запрос к 1 таблице, потом ещё запрос к 2 таблицам
а потом пробежать по массиву.

А громоздкость я имел ввиду не в плане производительности, а в плане читаемости кода.
 

Фанат

oncle terrible
Команда форума
ну я вот и хочу понять, что будет лучше сделать
1 запрос к 3 таблицам

или сначала запрос к 1 таблице, потом ещё запрос к 2 таблицам
а потом пробежать по массиву.
ВОЗЬМИ, ДА ПОМЕРЯЙ
или ты хочешь, чтобы мы, отсюда, не видя ни твоих таблиц ни серверов, ни задач, а довольствуясь только твоими скудными путаными объяснениями тебе ответили на этот вопрос?
 

Screjet

Новичок
Не получится.
Первый запрос на поиск, а второй на группировку.

Если бы были возможны простые/быстрые варианты, то так бы и сделали.
 

Фанат

oncle terrible
Команда форума
Производительность. 2 варианта решения
громоздкость я имел ввиду не в плане производительности, а в плане читаемости кода.
Родной, ты бы эта... определился с начала, с симптомами?
А потом уже шел к доктору...
 

Фанат

oncle terrible
Команда форума
Чго ж тут непонятного?
Больной, так что вас беспокоит - громоздкость кода, или его производительность?
Определитесь.
 

KPD

Новичок
Originally posted by Фанат
Чго ж тут непонятного?
Больной, так что вас беспокоит - громоздкость кода, или его производительность?
Определитесь.
Всегда беспокоит и то и другое:)
Я хочу понят насколько для СУБД легче выполнить 2 запроса из 1-таблицы, чем 1 запрос из 2-х таблиц.
 

Screjet

Новичок
Тебя, как разработчика, должно беспокоить только одно: как сдать работу вовремя:)
 

KPD

Новичок
Originally posted by Screjet
Тебя, как разработчика, должно беспокоить только одно: как сдать работу вовремя:)
Ну если ограничиваться только этим, то проще сделать 1 запрос их 3-х табличек:D
 

Фанат

oncle terrible
Команда форума
Всегда беспокоит и то и другое
Обратись к доктору.
Здесь беспокойства не лечат.
Я хочу понят насколько для СУБД легче выполнить 2 запроса из 1-таблицы, чем 1 запрос из 2-х таблиц.
Ага.
Как я понимаю, до тебя до сих пор так ничего и не дошло.

Screjet, будт внимательнее. Нальзя называть разработчиком человека, который полагает, что производительность бд измеряется в запросах. что единица производительности - это запрос.
ккой угодно - селект по первичному ключу одной записи или полное чтение двух талблиц с объединением без индексов - это без разницы.
Главное - СКОЛЬКО запросов.
 

Фанат

oncle terrible
Команда форума
хочу понят насколько для СУБД легче выполнить 2 запроса из 1-таблицы, чем 1 запрос из 2-х таблиц
это не ты, это дух святой был

-~{}~ 21.01.05 15:30:

тебе уже важно кто что говорил?
Уже даже ни производительность ни громоздкость не волнует?
 
Сверху