QuadMan
Новичок
оптимизация запроса SELECT (не используются индексы)
Здравствуйте!
Пытаюсь разобраться с MySQL, но уже, честно говоря, совсем запустался. Прошу вашей помощи!
Есть две таблицы.
Первая (большая таблица на 2,5 миллионов записей):
CREATE TABLE `table1` (
`IPN1` int(10) unsigned zerofill NOT NULL default '0000000000',
`IPN2` int(10) unsigned zerofill NOT NULL default '0000000000',
`CTRY` char(2) NOT NULL default '',
KEY `IPN2` (`IPN2`),
KEY `IPN1` (`IPN1`)
);
Вторая (небольшая - около 1000 записей):
CREATE TABLE `table2` (
`IP` int(10) unsigned zerofill NOT NULL default '0000000000',
PRIMARY KEY (`IP`)
);
Пишу запрос SELECT, который для каждой записи из table2 находит запись из table1 такую, что table2.IP>table1.IPN1 AND table2.IP<table1.IPN2.
Запрос следующий:
SELECT table1.CTRY from table1,table2 WHERE table2.IP BETWEEN table1.IPN1 AND table1.IPN2
но он выполняется жутко медленно - отбирает 3 записи за 30 секунд!!!
EXPLAIN SELECT дает, что
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE table2 index PRIMARY PRIMARY 4 NULL 441 Using index
1 SIMPLE table1 ALL NULL NULL NULL NULL 2459642
т.е. почему-то для table1 он не хочет использовать индексы, видимо проблема в этом. Подскажите - почему он не хочет производить поиск с учетом построенных индексов?
Заранее спасибо!
Здравствуйте!
Пытаюсь разобраться с MySQL, но уже, честно говоря, совсем запустался. Прошу вашей помощи!

Есть две таблицы.
Первая (большая таблица на 2,5 миллионов записей):
CREATE TABLE `table1` (
`IPN1` int(10) unsigned zerofill NOT NULL default '0000000000',
`IPN2` int(10) unsigned zerofill NOT NULL default '0000000000',
`CTRY` char(2) NOT NULL default '',
KEY `IPN2` (`IPN2`),
KEY `IPN1` (`IPN1`)
);
Вторая (небольшая - около 1000 записей):
CREATE TABLE `table2` (
`IP` int(10) unsigned zerofill NOT NULL default '0000000000',
PRIMARY KEY (`IP`)
);
Пишу запрос SELECT, который для каждой записи из table2 находит запись из table1 такую, что table2.IP>table1.IPN1 AND table2.IP<table1.IPN2.
Запрос следующий:
SELECT table1.CTRY from table1,table2 WHERE table2.IP BETWEEN table1.IPN1 AND table1.IPN2
но он выполняется жутко медленно - отбирает 3 записи за 30 секунд!!!
EXPLAIN SELECT дает, что
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE table2 index PRIMARY PRIMARY 4 NULL 441 Using index
1 SIMPLE table1 ALL NULL NULL NULL NULL 2459642
т.е. почему-то для table1 он не хочет использовать индексы, видимо проблема в этом. Подскажите - почему он не хочет производить поиск с учетом построенных индексов?
Заранее спасибо!