我应该选择哪个索引?(Mysql)

时间:2011-11-12 21:51:26

标签: mysql sql

表格

CREATE TABLE `table1` (
  `f1` int(11) NOT NULL default '0',
  `f2` int(4) NOT NULL default '0',
  `f3` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`f1`)
) TYPE=MyISAM

查询:

select `f1` from table1 where `f2`=123 order by `f3` desc;

我想为此查询创建一个“覆盖索引”

ALTER TABLE `table1` ADD INDEX (`f2`,`f3`,`f1`);

ALTER TABLE `table1` ADD INDEX (`f2`,`f1`,`f3`);
我应该选择哪个?

2 个答案:

答案 0 :(得分:2)

第一个。 MySQL可以使用任一索引来获取结果集,而无需从实际表中读取。第一个索引的效率略高,因为没有必要执行重新排序行的额外步骤。

答案 1 :(得分:0)

对于您的查询,您只需要f2上的索引。

如果您使用诸如“f1 = 12和f2 = 15”之类的whereclause进行查询,则 可能 也需要f1和f2的索引。但是,主键可能会更快地为您提供结果,具体取决于数据和完整查询。

如果您对3(在where子句中)的查询范围内,您(可能)需要一个覆盖3个字段的索引。

15年来,我从未面临过仅为订购结果创建索引的需求。这个操作非常快。什么是缓慢的是找到行(where子句),而不同的集匹配(连接)。

现在,如果您不确定,请创建两者。你查询并检查一个mysql使用的explain_plan。然后放弃另一个^^。