SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.06.2012 21:30:59

freeetu
Участник
Зарегистрирован: 11.06.2012
Сообщений: 11

Вопрос по скорости и оптимизации

Есть такой запрос

    SELECT * FROM `net_country_ip`
    WHERE 2994698607 BETWEEN `begin_ip` AND `end_ip`
    LIMIT 1

и его аналог

    SELECT * FROM `net_country_ip`
    WHERE `begin_ip` <= 2994698607 && 2994698607 <= `end_ip`
    LIMIT 1

`net_country_ip` содержит 243,210 записей( MyISAM utf8_general_ci ) формата
    country_id (AI - INT)| begin_ip(INDEX - INT) | end_ip(INDEX - INT)

Выполняет запрос за огромные  0.1529 сек. Как это можно ускорить или оптимизировать и где ошибка (шибко долго выполняет)...

Неактивен

 

#2 19.06.2012 21:42:21

freeetu
Участник
Зарегистрирован: 11.06.2012
Сообщений: 11

Re: Вопрос по скорости и оптимизации

Пока думаю... Додумал => Разбить на два запроса с LIMIT 1 => ускорение до 0.0007 Х 2 сек

Неактивен

 

#3 19.06.2012 21:53:36

freeetu
Участник
Зарегистрирован: 11.06.2012
Сообщений: 11

Re: Вопрос по скорости и оптимизации

SELECT `name_ru` FROM
(
    SELECT * FROM `net_country_ip`
     LEFT JOIN `net_country` USING (`country_id`)
    WHERE `begin_ip` <= 2994698607
    ORDER BY `begin_ip` DESC
    LIMIT 1
)  AS t
    WHERE `end_ip` >= 2994698607

Строк больше - скорость ниже (запрос занял 0.0014 сек.)
Куда уже быстрее...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson