2

考虑具有以下架构的 MySql 表

+-------------------+------------+------+-----+-
| Field             | Type       | Null | Key | 
+-------------------+------------+------+-----+-
| id                | int(11)    | NO   | PRI | 
| user_id           | int(11)    | YES  | MUL | 
| following_user_id | int(11)    | NO   | MUL | 
+-------------------+------------+------+-----+-

现在我需要像这样的查询

select * from table where user_id = <x> and following_user_id = <y>;

并且

select * from table where following_user_id = <x> and user_id = <y>;

所以我正在考虑对 2 列进行复合索引,如下所示:

index(user_id, following_user_id)

index(following_user_id, user_id)

1)索引是根据需要创建的,但是当记录很多(〜百万)时它们会起作用吗?

2) 索引会在正确的时间使用正确的索引来加速查询吗?

PS:我不需要sort/range selection查询,只需要直接匹配查询。是否有更好的索引方案可用于此要求?

4

1 回答 1

2

从编译器的角度来看,您的查询是相同的。任何一个索引都可以。语句中子句的顺序where对于限定查询以获取索引并不重要。

但是,如果您有不等式或只有一个子句,则索引中的排序会有所不同。

因此,该索引index(user_id, following_user_id)对于以下情况很有用:

  • 直接在 user_id 上进行任何比较(<> 除外)
  • user_id = XXX 和以下_user_id = YYY
  • user_id = XXX 和以下_user_id /IN 值

不会用于:

  • 以下_user_id < YYY
于 2013-02-21T18:59:27.983 回答