Пропустить

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

Вопросы без привязки к версии. Установлена авточистка (2 года).
Свернуть Развернуть Правила форума Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Re: Оптимизация SQL-запросов

Сообщение Simple » 08.09.2011 16:35

Не знаю, в ту ли тему пишу, но меня интересует такой вопрос. Вот мне например на форуме, не желательно чтобы у пользователей была графа "сайт", т.к. не пользуется она популярностью, зато спамеры не ленятся пихать туда свои линки, казалось бы, решение предельно простое - вырезать кусок кода из шаблонов, который отвечает за отображение этой графы, но хочется помимо этого, еще и убрать лишние запросы к базе (если они есть, а мне кажется что должны быть), выполняемые для отображения сайта пользователя. Можно ли польностью искоренить тут или иную функцию, например кроме графы "сайт" еще и графу "джаббер" и "имейл" убрать полностью, а не только из шаблонов. Возможно ли такое и есть ли смысл это делать? И вообще вызывают ли эти графы доп. нагрузку если не используются?
Аватара пользователя
Simple
phpBB 2.0.4
 
Сообщения: 212
Зарегистрирован: 21.04.2011 16:01
Откуда: Крым, Бахчисарай
Благодарил (а): 64 раз.
Поблагодарили: 13 раз.

Re: Оптимизация SQL-запросов

Сообщение Пчелкин » 12.09.2011 14:20

Можно удалить эти пункты полностью и сделать их "самодельными", да еще отключаемые правами для групп...Например - у админов и модеров есть, у новеньких - нет..А у пользователей обычных, например с 100 сообщениями появляется в урезанном варианте (например без использования ссылок или без преобразования ссылок в ссылки) и так далее..но самодельные...
Фанат phpBB. В HTML - без проблем, в CSS - так себе, учусь, в php - баран, помогает только дедукция
Аватара пользователя
Пчелкин
phpBB 3.0.7-PL1
 
Сообщения: 4891
Зарегистрирован: 15.01.2010 14:57
Откуда: От Москвы 9 часов на Боинге
Благодарил (а): 288 раз.
Поблагодарили: 552 раз.

Re: Оптимизация SQL-запросов

Сообщение Simple » 16.09.2011 9:54

Пчелкин писал(а):Можно удалить эти пункты полностью

Собственно это мне и нужно. Знать бы только где кроме вьютопика можно удалить эту функцию :D
Аватара пользователя
Simple
phpBB 2.0.4
 
Сообщения: 212
Зарегистрирован: 21.04.2011 16:01
Откуда: Крым, Бахчисарай
Благодарил (а): 64 раз.
Поблагодарили: 13 раз.

Re: Оптимизация SQL-запросов

Сообщение Пчелкин » 16.09.2011 10:31

В Личном разделе еще убрать стандартные и делать как доп поля через админку под правами...Но морочно..но можно...
Фанат phpBB. В HTML - без проблем, в CSS - так себе, учусь, в php - баран, помогает только дедукция
За это сообщение автора Пчелкин поблагодарил:
Simple (16.09.2011 11:16)
Аватара пользователя
Пчелкин
phpBB 3.0.7-PL1
 
Сообщения: 4891
Зарегистрирован: 15.01.2010 14:57
Откуда: От Москвы 9 часов на Боинге
Благодарил (а): 288 раз.
Поблагодарили: 552 раз.

Re: Оптимизация SQL-запросов

Сообщение Shredder » 05.11.2011 2:21

	function list_dupe_users()
	{
		global $auth, $db, $template, $phpbb_root_path, $phpEx;

		$sql = 'SELECT user_id, username, user_banned_cookie, ip_common_names, c_common_names
			FROM ' . USERS_TABLE . '
			WHERE user_double = ' . (bool) true . '
			ORDER BY user_id DESC';
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$ban = ($row['user_banned_cookie']) ? 0 : 1;

			$ip_common_names = explode(', ', $row['ip_common_names']);
			foreach ($ip_common_names as $ip_dupe_name)
			{
				$ip_sql = 'SELECT user_id
					FROM ' . USERS_TABLE . '
					WHERE username = "' . $db->sql_escape($ip_dupe_name) . '"';
				$ip_result = $db->sql_query($ip_sql);
				$ip_dupe_id = $db->sql_fetchfield('user_id');
				$db->sql_freeresult($ip_result);

				$ip_names_array[] = ($ip_dupe_id) ? '<a href="' . (($auth->acl_get('a_user')) ? append_sid("{$phpbb_root_path}adm/index.$phpEx", 'i=users&amp;mode=overview&amp;u=' . $ip_dupe_id, true) : '') . '">' . $ip_dupe_name . '</a>' : $ip_dupe_name;
			}
			sort($ip_names_array);
			$ip_common_names = implode(', ', array_filter($ip_names_array));
			unset($ip_names_array);

			$c_common_names = explode(', ', $row['c_common_names']);
			foreach ($c_common_names as $c_dupe_name)
			{
				$c_sql = 'SELECT user_id
					FROM ' . USERS_TABLE . '
					WHERE username = "' . $db->sql_escape($c_dupe_name) . '"';
				$c_result = $db->sql_query($c_sql);
				$c_dupe_id = $db->sql_fetchfield('user_id');
				$db->sql_freeresult($c_result);

				$c_names_array[] = ($c_dupe_id) ? '<a href="' . (($auth->acl_get('a_user')) ? append_sid("{$phpbb_root_path}adm/index.$phpEx", 'i=users&amp;mode=overview&amp;u=' . $c_dupe_id, true) : '') . '">' . $c_dupe_name . '</a>' : $c_dupe_name;
			}
			sort($c_names_array);
			$c_common_names = implode(', ', array_filter($c_names_array));
			unset($c_names_array);

			$template->assign_block_vars('dupe_users', array(
				'USER_ID'			=> $row['user_id'],
				'USERNAME'			=> $row['username'],
				'IP_COMMON_NAMES'		=> $ip_common_names,
				'COOKIE_COMMON_NAMES'		=> $c_common_names,
				'S_BAN_STATUS'			=> ($row['user_banned_cookie'] !== '') ? (($row['user_banned_cookie']) ? ' style="color: red;"' : ' style="color: green;"') : '',

				'U_USER_ADMIN'		=> ($auth->acl_get('a_user')) ? append_sid("{$phpbb_root_path}adm/index.$phpEx", 'i=users&amp;mode=overview&amp;u=' . $row['user_id'], true) : '',
				'U_USER_COOKIE_BAN'	=> append_sid("{$phpbb_root_path}adm/index.$phpEx", 'i=dap&amp;mode=dupe_user_list&amp;ban=' . $ban . '&amp;u=' . $row['user_id'], true),
			));
		}
		$db->sql_freeresult($result);

		return;
	}

Вызов вот такой простой функции на странице даёт 192 запроса. Никак не могу понять, как такое может быть!? Причём, каждый из 3-х запросов даёт одинаково - 60 с лишним, даже первый.

Shredder
Former team member
 
Сообщения: 1034
Зарегистрирован: 14.12.2008 11:18
Благодарил (а): 62 раз.
Поблагодарили: 181 раз.

Re: Оптимизация SQL-запросов

Сообщение Палыч » 05.11.2011 2:48

А чего непонятного?
Первый запрос - выборка.
Потом у тебя цикл обработки выборки построчно. На каждом шаге цикла (каждой строке) по два foreach, в каждом из которых по запросу.
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
Палыч
Просто Палыч
Просто Палыч
 
Сообщения: 9467
Зарегистрирован: 24.05.2006 23:20
Откуда: Питер
Благодарил (а): 3 раз.
Поблагодарили: 337 раз.

Re: Оптимизация SQL-запросов

Сообщение Shredder » 05.11.2011 2:53

Палыч
Я о том, что если вырезать два этих последующих цикла foreach, оставив только первый без цикла, и перезагрузить страницу, то всё равно остаётся 60 с лишним запросов.

Добавлено спустя 1 минуту:
Если убрать и этот первый запрос, то остаётся 3.

Добавлено спустя 22 минуты 33 секунды:
А, вон оно в чём дело... Кажется, разобрался (неправильно при проверке вырезал).
Хорошо, есть какой-нибудь способ оптимизировать эту конструкцию?

--------
Всё, разобрался.

Shredder
Former team member
 
Сообщения: 1034
Зарегистрирован: 14.12.2008 11:18
Благодарил (а): 62 раз.
Поблагодарили: 181 раз.

Пред.

Вернуться в phpBB-пространство

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Изображение