Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Оптимизация запроса (Coagulant) 07/03/2005 - 19:37:22
      Re: Оптимизация запроса (Dinky) 07/03/2005 - 20:12:16
      Re: Оптимизация запроса (Coagulant) 07/03/2005 - 20:47:26
      Re: Оптимизация запроса (Dinky) 07/03/2005 - 22:47:50
      Re: Оптимизация запроса (Coagulant) 08/03/2005 - 01:22:43

> Original message text:
> From: Coagulant - 07/03/2005 - 19:37:22
> Subject:Оптимизация запроса
> -----------------
> Имеется запрос (слегка переделанный из форума phpbb), который выполняется достаточно медленно и хотелось бы его ускорить:
>
> SELECT u.user_id, u.username, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_time, s.session_page, s.session_ip, i.country
> FROM phpbb_users u, phpbb_sessions s, phpbb_ip2country i
> WHERE u.user_id = s.session_user_id
> AND s.session_time >=1109870034
> AND s.session_ip >= i.ip_from
> AND s.session_ip <= i.ip_to
> ORDER BY u.username ASC , s.session_ip ASC
>
>
> Вот структура 3-х таблиц, из которых делается выборка:
>
>
> CREATE TABLE `phpbb_users` (
> `user_id` mediumint(8) NOT NULL default '0',
> `username` varchar(25) NOT NULL default '',
> `user_session_time` int(11) NOT NULL default '0',
> `user_level` tinyint(4) default '0',
> `user_allow_viewonline` tinyint(1) NOT NULL default '1',
> PRIMARY KEY (`user_id`),
> KEY `user_session_time` (`user_session_time`)
> ) TYPE=MyISAM;
>
> CREATE TABLE `phpbb_sessions` (
> `session_id` char(32) NOT NULL default '',
> `session_user_id` mediumint(8) NOT NULL default '0',
> `session_start` int(11) NOT NULL default '0',
> `session_time` int(11) NOT NULL default '0',
> `session_ip` char(8) NOT NULL default '0',
> `session_page` int(11) NOT NULL default '0',
> `session_logged_in` tinyint(1) NOT NULL default '0',
> PRIMARY KEY (`session_id`),
> KEY `session_user_id` (`session_user_id`),
> KEY `session_id_ip_user_id` (`session_id`,`session_ip`,`session_user_id`)
> ) TYPE=MyISAM;
>
> CREATE TABLE `phpbb_ip2country` (
> `ip_from` varchar(8) NOT NULL default '',
> `ip_to` varchar(8) NOT NULL default '',
> `country_short` char(2) NOT NULL default '',
> `country` varchar(50) NOT NULL default '',
> PRIMARY KEY (`ip_from`,`ip_to`)
> ) TYPE=MyISAM;
>
> Explain выдает следующее:
>
> table type possible_keys key key_len ref rows Extra
> i ALL PRIMARY NULL NULL NULL 54502 Using temporary; Using filesort
> s ALL session_user_id NULL NULL NULL 66 Using where
> u eq_ref PRIMARY PRIMARY 3 s.session_user_id 1
>
>


From: Coagulant - 07/03/2005 - 20:47:26
Subject:Оптимизация запроса
-----------------
>> s.session_time >=1109870034
>если это ограничение дает строк меньше чем кол-во записей в phpbb_ip2country
>то добавь на него индекс и посмотри explain еще раз ;)
>может даже сделать его по двум полям - (session_time,session_user_id)

Да результат вобщем-то то же. Для phpbb_ip2country обходит все 54502 строки (Using temporary; Using filesort)


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
20664



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |