这是一个非常基本的问题,但我对我在不同地方阅读的内容感到困惑。我有一个不包含大量数据的简单表(对于任何给定的数据库,通常少于500行)对此表的典型查询如下所示:
select system_fields.name from system_fields where system_fields.form_id=? and system_fields.field_id=?
我的问题是,我应该为form_id创建一个单独的索引,为field_id创建一个索引,还是应该在这两个字段的组合上创建索引?我以前从未真正对多列索引做过任何事情。
CREATE TABLE IF NOT EXISTS `system_fields` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`field_id` int(11) NOT NULL,
`form_id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`reference_field_id` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `field_id` (`field_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=293 ;
答案 0 :(得分:1)
如果您总是要通过这两个字段进行查询,请添加多列索引。
我还要指出,如果你想要<表中有500行,您的索引甚至可能无法使用。在500行表中有或没有索引的任何性能差异都可以忽略不计。
这里有一点(好)阅读: https://www.percona.com/blog/2014/01/03/multiple-column-index-vs-multiple-indexes-with-mysql-56/