Задавайте вопросы, мы ответим
Вы не зашли.
доброе время суток.
будьте добры, подскажите как правильно проставить индексы в данной таблице:
CREATE TABLE IF NOT EXISTS `people_1_b_fs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`b_id` int(10) NOT NULL,
`man_id` int(10) NOT NULL,
`admin` tinyint(1) NOT NULL,
`name` varchar(16) NOT NULL,
`surname` varchar(16) NOT NULL,
`nickname` varchar(16) NOT NULL,
`birthdate` int(10) NOT NULL,
`priv` tinyint(1) NOT NULL,
`rate` int(8) NOT NULL,
`vote` int(8) NOT NULL,
`url` varchar(16) NOT NULL,
`time` int(10) NOT NULL,
`dropId` varchar(64) NOT NULL,
`coutry_id` int(8) NOT NULL,
`region_id` int(10) NOT NULL,
`city_id` int(10) NOT NULL,
`sex` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `b_id` (`b_id`,`man_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
я думаю что по названием колонок приблизительно ясно что за инфа будет в них. в таблице будет находится более 100 миллионов записей. выборка будет производится по таким полям:
`b_id`, `man_id`
`b_id`, `name`, `surname`, `nickname`
`b_id`, `name`, `surname`, `nickname`, `birthdate`
`b_id`, `time`
`b_id`, `coutry_id`, `region_id`, `city_id`
`b_id`, `sex`
`b_id`, `rate`
`b_id`, `name`, `surname`, `nickname`, `birthdate`, `rate`, `coutry_id`, `region_id`, `city_id`, `sex`, `time`
какие в данном случае лучше всего создать индексы что бы запросы к таблице работали как можно быстрее?
заранее благодарен за помощь!
Неактивен
Прямо-таки напрашивается индекс на (b_id,name,surname,nickname), конечно.
А у b_id большой разброс значений или маленький?
Неактивен
b_id до 10 000, возможно 15 000, максимум 20 000
Неактивен
Чтобы создавать индексы без знания запросов, которые будут их использовать, нужно иметь продвинутый хрустальный шар. У меня такого нет
По сути вашего вопроса, рекомендую посмотреть "Шварц Б., Зайцев П., Ткаченко В. MySQL. Оптимизация производительности" в третьей главе есть хороший материал про стратегии индексирования.
Неактивен