【发布时间】:2013-08-08 21:34:09
【问题描述】:
我有下一张桌子:
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 在下一个查询中使用“Using Where”:
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
更新,为什么下一个问题有类型 - All 和 Using where then:
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索引,date_2索引完全一样的功能
-
是的,我知道,我添加 date_1 只是为了没有得到答案 - 使用 1 列索引
-
第二个问题确实是“mysql fix Using where;”的副本。 @TePort,尽管如此,请看我的更新。
标签: mysql indexing query-optimization