向表中添加索引

时间:2012-08-24 01:37:59

标签: mysql indexing

我有一个从服务器端获取数据的数据表,我想通过添加索引来优化我的表,以便排序更快(现在需要大约7秒来排序60K行)

我的'copy create statement to clipboard'如下所示:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` char(128) COLLATE utf8_unicode_ci NOT NULL,
  `salt` char(5) COLLATE utf8_unicode_ci NOT NULL,
  `joined` int(10) unsigned NOT NULL,
  `name` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `surname` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `role` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `photo` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `user_type` int(11) DEFAULT NULL,
  `user_owner` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=81634 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

我遇到的问题是,如果我使用它:

ALTER TABLE `users` ADD INDEX (`email`, `name`, `surname`, `user_type`) ;

仅对电子邮件编制索引(至少只能对电子邮件列进行快速排序)。我不确定我可以做些什么来添加其他索引列(或者它实际上是否有利于优化它)。

1 个答案:

答案 0 :(得分:1)

您必须为要使用的每个列添加单独的索引。

但请注意:MySQL只能使用where子句的索引或order by。但不是两个一次。除非,两者都是相同的指数。但在这种情况下,where子句必须是常量(即它必须匹配单个值)。

另请参阅:http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html