【发布时间】:2012-05-29 04:01:04
【问题描述】:
我有一个 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 小时 - 如果我要添加或删除多个索引,您可以在一个查询中完成还是必须这样做他们一个接一个地等待每个完成?
感谢您的意见。
【问题讨论】:
标签: mysql database-design indexing