我需要在一个储存10多万行的表格中优化指数。 尤其耗费时间的问题需要10秒才能装载(当WHERE条款只过滤大约2百万分——8百万分必须分类时)。 我制定了几个指数(其中一些比较复杂,有些比较简单),并试图找出如何加快这一速度。 或许 我做的是错的。 我的SQL正在使用优化的5指数(基于EXPLAIN)。
表格结构和问题:
CREATE TABLE IF NOT EXISTS `geo_reverse` (
`fid` mediumint(8) unsigned NOT NULL,
`tablename` enum( table1 , table2 ) NOT NULL default table1 ,
`geo_continent` varchar(2) NOT NULL,
`geo_country` varchar(2) NOT NULL,
`geo_region` varchar(8) NOT NULL,
`geo_city` mediumint(8) unsigned NOT NULL,
`type` varchar(30) NOT NULL,
PRIMARY KEY (`fid`,`tablename`,`geo_continent`,`geo_country`,`geo_region`,`geo_city`),
KEY `geo_city` (`geo_city`),
KEY `fid` (`fid`),
KEY `geo_region` (`geo_region`,`geo_city`),
KEY `optimized` (`tablename`,`type`,`geo_continent`,`geo_country`,`geo_region`,`geo_city`,`fid`),
KEY `optimized_2` (`fid`,`tablename`),
KEY `optimized_3` (`type`,`geo_city`),
KEY `optimized_4` (`geo_city`,`tablename`),
KEY `optimized_5` (`tablename`,`type`,`geo_city`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
实例:
SELECT type, COUNT(*) AS objects FROM geo_reverse WHERE tablename = table1 AND geo_city IN (5847207,5112771,4916894,...) GROUP BY type
你们对如何加快计算是否有任何想法?