У меня есть следующая таблица:Mysql не использует индекс над огромным столом
CREATE TABLE `test` (
`fingerprint` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`country` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
`loader` int(10) unsigned NOT NULL,
`date` date NOT NULL,
`installer` int(10) unsigned DEFAULT NULL,
`browser` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`version` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`os` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`language` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
PRIMARY KEY (`fingerprint`, `date`),
KEY `date_1` (`date`),
KEY `date_2` (`date`,`loader`,`installer`,`country`,`browser`,`os`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Сейчас она содержит 10M запись и будет увеличиваться за 2M записей/день.
Мой вопрос, почему MySQL использовать "Использование Где" на следующий запрос:
explain select count(*) from test where date between '2013-08-01' and '2013-08-10'
1 SIMPLE test range date_1,date_2 date_1 3 1601644 Using where; Using index
Update, почему следующий вопрос имеют тип - все и с помощью которых затем:
explain select * from test use key(date_1) where date between '2013-08-01' and '2013-08-10'
1 SIMPLE test ALL date_1 null null null 3648813 Using where
Просто комментарий, вам не нужен индекс date_1, индекс даты_2 охватывает ту же функциональность – PerroVerd
да, я знаю, я добавляю date_1, чтобы не получить ответы - используйте 1 индекс столбца –
возможный дубликат [mysql fix Использование where ;] (http://stackoverflow.com/questions/9533841/mysql-fix-using-where) –