gpt4 book ai didi

mysql - MySql 中的复合索引是否双向工作?

转载 作者:行者123 更新时间:2023-11-29 02:29:48 25 4
gpt4 key购买 nike

考虑具有以下架构的 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:我不需要排序/范围选择查询,只需要直接匹配查询。有没有更好的索引方案可以满足这个要求?

最佳答案

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

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

因此,索引 index(user_id, following_user_id) 对这些情况很有用:

  • 直接对 user_id 进行任何比较(<> 除外)
  • user_id = XXX 和 folowing_user_id = YYY
  • user_id = XXX 和 following_user_id/IN 值

不会用于:

  • following_user_id < YYY

关于mysql - MySql 中的复合索引是否双向工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15010170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com