Запрос делается очень долго. в таблице 3,711,701 записей. [sql]SELECT `loc_id` FROM `geoip_blocks` WHERE '1122334455' BETWEEN `start_ip` and `end_ip` LIMIT 1[/sql] локальный сервер: Отображает строки 0 - 0 (1 всего, запрос занял 9.4167 сек.) удалённый сервер: Отображает строки 0 - 0 (1 всего, запрос занял 5.5468 сек.) структура таблицы: [sql] CREATE TABLE IF NOT EXISTS `geoip_blocks` ( `start_ip` int(10) unsigned NOT NULL, `end_ip` int(10) unsigned NOT NULL, `loc_id` int(10) unsigned NOT NULL, PRIMARY KEY (`start_ip`), UNIQUE KEY `end_ip` (`end_ip`), KEY `loc_id` (`loc_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; [/sql] Explain: [sql]id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE geoip_blocks range PRIMARY,end_ip PRIMARY 4 NULL 1735515 Using where[/sql] при чём надо чтоб на странице выводил таблицу юзеров с городами, а это больше 50 таких запросов каким образом можно увеличить скорость?
Судя по всему диапазоны start_ip` and `end_ip` не должны пересекаться для разных loc_id. Тогда можно использовать запрос SELECT `loc_id` FROM `geoip_blocks` WHERE '1122334455'>=`start_ip` LIMIT 0,1