Медленные запросы

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Сашамел
phpBB 1.0.0
Сообщения: 8
Стаж: 12 лет 8 месяцев
Благодарил (а): 3 раза

Медленные запросы

Сообщение Сашамел »

Я к сожалению плохо понимаю в php и в запросах mysql. Поэтому прощу помощи. :oops:

Хостпровайдер высвечивает медленный запрос:

Код: Выделить всё

SELECT u.*, z.friend, z.foe, p.* FROM (phpbb_users u CROSS JOIN phpbb_posts p) LEFT JOIN phpbb_zebra z ON (z.user_id = 116 AND z.zebra_id = p.poster_id) WHERE p.post_id = 908
      AND u.user_id = p.poster_id
Что это значит? Нужно что-то предпринимать?
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13159
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Медленные запросы

Сообщение Татьяна5 »

Удалить лишние моды или менять провайдера
ostridm
phpBB 2.0.7
Сообщения: 552
Стаж: 14 лет 5 месяцев
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Re: Медленные запросы

Сообщение ostridm »

это обычный запрос для viewtopic.php чтобы определить какие посты от недругов не показывать текущему пользователю номер 116
надо провериььв каком количестве водятся друзья и недруги у данного пользователя
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Медленные запросы

Сообщение nissin »

Сашамел
Можно сделать EXPLAIN этого запроса в phpmyadmin?
Т.е. сделать этот же запрос, но добавив в начале EXPLAIN.

Да и заменить CROSS JOIN на LEFT JOIN в запросе явно бы не помешало.
OPEN viewtopic.php
FIND

Код: Выделить всё

$sql = $db->sql_build_query('SELECT', array(
	'SELECT'	=> 'u.*, z.friend, z.foe, p.*',

	'FROM'		=> array(
		USERS_TABLE		=> 'u',
		POSTS_TABLE		=> 'p',
	),

	'LEFT_JOIN'	=> array(
		array(
			'FROM'	=> array(ZEBRA_TABLE => 'z'),
			'ON'	=> 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id'
		)
	),

	'WHERE'		=> $db->sql_in_set('p.post_id', $post_list) . '
		AND u.user_id = p.poster_id'
));
REPLACE WITH

Код: Выделить всё

$sql = $db->sql_build_query('SELECT', array(
	'SELECT'	=> 'u.*, z.friend, z.foe, p.*',

	'FROM'		=> array(
		POSTS_TABLE		=> 'p',
	),

	'LEFT_JOIN'	=> array(
		array(
			'FROM'	=> array(USERS_TABLE => 'u'),
			'ON'	=> 'u.user_id = p.poster_id'
		),
		array(
			'FROM'	=> array(ZEBRA_TABLE => 'z'),
			'ON'	=> 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id'
		)
	),

	'WHERE'		=> $db->sql_in_set('p.post_id', $post_list)
));
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 14 лет 4 месяца
Благодарил (а): 152 раза
Поблагодарили: 215 раз
Забанен: Бессрочно

Re: Медленные запросы

Сообщение xisp »

nissin писал(а):Да и заменить CROSS JOIN на LEFT JOIN в запросе явно бы не помешало.
Сколько не профилировал- существенных отличий не нашёл. Это реально лучше?
phpBBex
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Медленные запросы

Сообщение MIT »

xisp писал(а):существенных отличий не нашёл
В этом конкретном примере или в различных типах JOIN`ов?
Аватара пользователя
xisp
phpBB 3.0.0 RC7
Сообщения: 1798
Стаж: 14 лет 4 месяца
Благодарил (а): 152 раза
Поблагодарили: 215 раз
Забанен: Бессрочно

Re: Медленные запросы

Сообщение xisp »

В этом конкретном примере, на БД форума и этого запроса.
phpBBex
ostridm
phpBB 2.0.7
Сообщения: 552
Стаж: 14 лет 5 месяцев
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Re: Медленные запросы

Сообщение ostridm »

различий в профилировании нет, потому что их просто нет, мы наблюдаем две разные записи left join

WHERE .... AND u.user_id = p.poster_id

эквивалентно

'ON' => 'u.user_id = p.poster_id'

оно было бы CROSS JOIN не будь этих условий.
Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2229
Стаж: 18 лет 9 месяцев
Откуда: Астана
Благодарил (а): 7 раз
Поблагодарили: 344 раза

Re: Медленные запросы

Сообщение nissin »

xisp писал(а):
nissin писал(а):Да и заменить CROSS JOIN на LEFT JOIN в запросе явно бы не помешало.
Сколько не профилировал- существенных отличий не нашёл. Это реально лучше?
Да, реально лучше, исходя из 20 летнего опыта работы с различными СУБД.
Оптимизатор MySQL периодически переклинивает на подобных запросах, а когда ему всё разжёвано, результат всегда прогнозируемый.

Вернуться в «Поддержка phpBB 3.0.х»