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




MySQL.RU - Webboard



Вернуться
Primary не используется, но тормозит в 20 раз (sverel) 28/06/2011 - 13:24:19
      Re: Доп. эксперемент: LIMIT 1 - не спасает (sverel) 28/06/2011 - 13:44:24
      Re: Primary не используется, но тормозит в 20 раз (Akina) 28/06/2011 - 14:07:01
      Re: Primary не используется, но тормозит в 20 раз (SveRel) 28/06/2011 - 18:50:16
      Re: Primary не используется, но тормозит в 20 раз (Akina) 28/06/2011 - 19:55:58
      Re: ... почему в учебниках пишут ... (Akina) 28/06/2011 - 20:02:13

> Original message text:
> From: sverel - 28/06/2011 - 13:24:19
> Subject:Primary не используется, но тормозит в 20 раз
> -----------------
> Тривиальная задача: по ip определить страну.
> Таблица:
> CREATE TABLE `geoip` (
> `ip_from` int(11) unsigned NOT NULL,
> `ip_to` int(11) unsigned NOT NULL,
> `country_name` varchar(255) NOT NULL,
> PRIMARY KEY (`ip_from`,`ip_to`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
>
> В таблице 111 тыс. записей
> Запрос:
> SELECT `country_name`
> FROM `geoip`
> WHERE 3758093313 BETWEEN `ip_from` AND `ip_to`;
>
>
> Время выполнения от 0.600 до 0.620 сек. Эксплейн показывает possible_keys=primary, key=null, type=all. Пробовал сделать ключ primary по одному полю - безрезультатно. В запросе пробовал менять BETWEEN на два условия <= AND >= тоже безрезультатно. Затем удалил primary и запрос стал выполнятся 0.035 сек!!! В обоих случаях профилирование показывает, что 99.9% времени уходит на Sending data, хотя в ответе всего одна ячейка из одной строки.
>
> Вопросы:
> 1. Почему не используется primary, когда он есть?
> 2. Почему в обоих случаях ключ не используется, но при отсутствии PRIMARY выполнение происходит в 20 раз быстрее?
> 3. Как же правильно настроить индексы?
>


From: SveRel - 28/06/2011 - 18:50:16
Subject:Primary не используется, но тормозит в 20 раз
-----------------
2. В обоих случаях МуСКЛ просматривал всю таблицу. Даже если он сначала просматривал primary, а потом переключился на полное сканирование, то не понятно почему замедление в 20 раз? Если б он сделал двойную работу, то и время должно было вырасти в 2 раза (ну или в 3). Но не в 20 же?

Точно не знаю, но наверняка есть дыры. Даже если сейчас их нет, то не факт, что они не появятся, ведь база geoip должна обновляться.

В любом случае, текущее положение дел вполне устраивает. База вряд ли будет сильно расти и время 0.035 сек - вполне приемлемое. Мне было больше интересно узнать техническую сторону ПОЧЕМУ ТАК ПРОИСХОДИТ и почему в учебниках пишут "никогда не делаёте выборку без индексов! Всегда делайте выборку только по индексам!".


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

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

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



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