Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Текстовые индексы


Автор: Suic2 20.2.2013, 15:54
есть таблица
Код

CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `ip` tinytext NOT NULL,
 `name` varchar(64) NOT NULL,
 .................................................................................
 PRIMARY KEY (`id`),
 UNIQUE KEY `name` (`name`),
) ENGINE=MyISAM AUTO_INCREMENT=11038 DEFAULT CHARSET=cp1251 COMMENT='rev_0'

очень много запросов вида 
Код

select * from users where ip='xxx.xxx.xxx.xxx';

как правильно создать индекс для этого поля?
пробовал создавать полнотекстовый индекс, но видимо это не то, что нужно, так как carninality у него была 1
ещё пробовал так:
Код

CREATE INDEX ip  USING BTREE ON users (ip(15))

оно поможет?

Автор: skyboy 20.2.2013, 17:15
храни ip как число.

Автор: Suic2 21.2.2013, 16:17
я бы и рад, но биллинг создавал не я и она уже слишком монстрообразная, чтобы так легко можно было изменить формат хранения ip

Автор: Akina 21.2.2013, 16:38
Полнотекст точно не нужен. Нужен обычный индекс. Но не факт что на всё поле.

Покажи пример данных в этом поле (особенно для одно- и двузначных чисел - есть там zerofill?) и опиши типичные параметры запросов (идёт пачка соседних адресов, или сплошной разнобой)...

Добавлено через 2 минуты и 26 секунд
К слову, на InnoDB и на MyISAM индекс и так по умолчанию BTREE...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)