具有3个字段的索引是否适用于2个字段查询?

时间:2010-02-22 10:52:31

标签: mysql indexing

我正在考虑在表上应用3个字段(type,status,user_id)的索引。我的大多数查询都有使用全部3的WHERE。但是,我有几个使用频繁的查询,只使用2个字段(类型和状态)。

我的问题是,创建一个包含所有3个字段的索引是否可以通过仅真正比较2个字段的查询来有效使用?或者更好的是有2个索引,一个有3个字段,一个有2个?

3 个答案:

答案 0 :(得分:4)

我比MySQL更了解Oracle,但我想在这种情况下它是一样的。索引通常是B-Tree,这意味着如果索引是(type, status, user_id),数据库通常仍然可以使用它来搜索(type, status),因为它是组合索引的第一部分。但是如果你使用(status, user_id)就不会出现这种情况,除非有类似Oracle的INDEX_SKIP_SCAN。

第二个索引只覆盖两个字段可能会稍快一些,取决于数据的多少。但是如果你有两个索引,那么插入数据的速度会慢一些,因为它们都需要维护。它还需要更多磁盘空间。所以这是一个只有你能决定的性能空间权衡。

答案 1 :(得分:1)

是的,您可以像在ewernli中提到的那样在MySQL中部分使用索引。

答案 2 :(得分:0)

看起来像一个BTREE索引,按顺序排序(按顺序:type,status,user_id),在这种情况下,一个索引可以在两个查询中使用:只使用2个字段(类型和状态)

如果您只查询user_id,则此索引无法帮助您。