![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
Nigel |
|
||||||||||||
познаю мир ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 20.11.2007 Репутация: нет Всего: 19 |
БД MYSQL5. Делаю GeoIp таргетинг на сайте. Решил попробовать руцентровскую базу.
В итоге, поиск веду по следующей таблице
Записей в базе порядка 100к. Запрос вида
выполняется СЛИШКОМ ДОЛГО для меня 0.4 сек. В explain'е следующее
Убираю индекс
Запрос занял 0.0179 сек Но в explain'е
Т.е. идет фулскан, который не есть гуд. Вопрос, что можно сделать, чтобы уменьшить время выборки. З.Ы. для сравнения пробовал maxmind'овскую базу, где поиск идет в файле. Время поиска при этом там 0.05 сек. Но она не точна для России. З.З.Ы. Просьба модераторам, сделать зеркало в разделе php/базы данных mysql. А есть раздел, посвященный оптимизации? (я что-то такой не видел на форуме) |
||||||||||||
|
|||||||||||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Во-первых,
прекрасно трансформируется в
Во-вторых, сделайте не один составной индекс, ибо его эффективно использовать невозможно, а два независимых индекса по каждому из полей. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
Nigel |
|
||||
познаю мир ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 20.11.2007 Репутация: нет Всего: 19 |
Akina, я это еще в самом начале пробовал.
В explain'е
Т.е. получается 2-ой вариант, смотрите пост выше. Да, время 0.01 - устраивает, но идет фулскан. |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Nigel |
|
|||
познаю мир ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 20.11.2007 Репутация: нет Всего: 19 |
Нет, в этом случае первый вариант, который в зависимости от айпи от 0.2 до 0.4 сек идет, что не подходит.
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
А если создать и использовать только один индекс? скажем ip_1?
Добавлено через 16 секунд впрочем, получится то же, что и с составным... Добавлено через 55 секунд Кстати... а если не форсить индексы - что выбирает парсер? любопытства ради я бы посмотрел... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Nigel |
|
|||
познаю мир ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 20.11.2007 Репутация: нет Всего: 19 |
Akina, в случае составного индекса, если не форсить, он оптимизатор то включает, то выключает, смотря, что ищешь (кстати, именно поэтому я начал форсе делать, так как индекс то добавил, а оптимизатор его игнорировал, умный он, однако)). Если делать 2, то он один из них использует, всегда почти второй.
Интересную вещь нашел.. В результате поиска он всегда выдает 2 айпи адреса, один со статусом ALLOCATED PA, другой - ASSIGNED PA. Т.е. провайдеру выдается сетка айпи адресов, он часть из них раздает местным компаниям. Так вот дописал в запросе LIMIT 2 и... Запрос занял 0.0005 сек, смотрю explain
![]() Получилось)) Вообщем, для этой задачи как я понял лучше использовать 2 индекса, чтобы оптимизатор выбирал подходящий при поиске и юзать лимит. Кстати, почему так с лимитом получается, может кто-нибудь объяснит? Ведь что с ним, что без него - находится по 2 записи, а скорость поиска - небо и земля. зы. Кажется, понял, когда он находит требуемые записи ( а их 2), то он дальше не сканит таблицу, а если лимит не указываешь, то ему приходится проверять, а может еще что в поиск попадет... ззы. темку еще открытой оставлю на пару деньков, может еще что предложат... Akina, ты не против ![]() Это сообщение отредактировал(а) Nigel - 20.11.2008, 11:28 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Если есть лимит - как только найдется 2 записи, поиск будет прекращен. Добавлено через 31 секунду Я тут не модератор, мне сиренево -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |