Задавайте вопросы, мы ответим
Вы не зашли.
Привет всем MySQL умельцем.
У меня такой вопрос. Есть таблица в которой несколько миллионов записей. Вот ее show create table:
CREATE TABLE IF NOT EXISTS `install_request` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`md` char(32) NOT NULL,
`mac` char(12) NOT NULL,
`system_id` char(32) NOT NULL,
`ip2long` int(11) unsigned NOT NULL,
`campaign_id` int(11) NOT NULL,
`carrier_app_id` int(11) NOT NULL COMMENT 'application id from request',
`time_start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'current timestamp - installation_duration from request',
`time_end` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'insertion time (installation end)',
`installation_status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'see status',
`country_code` char(3) DEFAULT NULL COMMENT 'not set on insert???',
`payout_rate` smallint(6) NOT NULL DEFAULT '0',
`saving` smallint(5) unsigned NOT NULL DEFAULT '0',
`not_shared_rate` int(10) unsigned NOT NULL DEFAULT '0',
`shared_rate` int(10) unsigned NOT NULL DEFAULT '0',
`must_pay` tinyint(1) NOT NULL DEFAULT '0',
`pay_status` tinyint(3) unsigned NOT NULL DEFAULT '0',
`over_quota` tinyint(1) NOT NULL DEFAULT '0',
`comp_already_credited` int(10) unsigned NOT NULL DEFAULT '0',
`tracking_id` text NOT NULL,
`version` varchar(20) NOT NULL,
`cmd` text,
`comment` text,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_install_request_md` (`md`),
KEY `mac` (`mac`,`ip2long`),
KEY `system_id` (`system_id`),
KEY `campaign_id` (`campaign_id`),
KEY `time_end` (`time_end`),
KEY `pay_status` (`pay_status`),
KEY `country_code` (`country_code`,`time_end`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=29852681 ;
Делаю такой запрос:
SELECT *
FROM install_request
WHERE time_end BETWEEN TIMESTAMP( '2013-02-17 00:00:00' ) AND TIMESTAMP( '2013-02-24 23:59:59' )
Не пользуется ключами. Вот Explain:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE i ALL time_end NULL NULL NULL 29852689 Using where
Если делаю подобную таблицу и копирую туда всего 1000 записей, то ключи работают ...
Неактивен
MySQL прежде чем использовать индекс, оценивает - будет ли это эффективнее, нежели просто считать с диска записи последовательно. Иногда ошибается в оценке, но вроде не очень часто.
Поэксперементируйте - задайте интервал временной в запросе поменьше чем неделя - использование индекса должно начаться. Или если force index задать в запросе.
Неактивен