我有一个 MISAM MySQL DB 表,里面有数百万行,我被要求使用它,但我需要先使查询速度更快。
以前根本没有索引!我在 'type' 列上添加了一个新索引,这很有帮助,但我想知道是否还有其他列可能也是最好的索引?
这是我的创建表:
CREATE TABLE `clicks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`companyid` int(11) DEFAULT '0',
`type` varchar(32) NOT NULL DEFAULT '',
`contextid` int(11) NOT NULL DEFAULT '0',
`period` varchar(16) NOT NULL DEFAULT '',
`timestamp` int(11) NOT NULL DEFAULT '0',
`location` varchar(32) NOT NULL DEFAULT '',
`ip` varchar(32) DEFAULT NULL,
`useragent` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `companyid` (`companyid`,`type`,`period`),
KEY `type` (`type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
典型的 SELECT 语句通常会按companyid
,type
和contextid
列进行过滤。
例如:
SELECT period, count(period) as count FROM clicks WHERE contextid in (123) AND timestamp > 123123123 GROUP BY period ORDER BY timestamp ASC
或者
SELECT period, count(period) as count FROM clicks WHERE contextid in (123) AND type IN('direct') AND timestamp > 123123123 GROUP BY period ORDER BY timestamp ASC
我的问题的最后一部分是这样的:当我在上面添加索引时type
大约需要 1 小时 - 如果我要添加或删除多个索引,你可以在一个查询中完成,还是必须一个接一个地完成并等待为每个完成?
谢谢你的想法。