我目前有一个这样设置的表,其中“信息”表连接到“事件”和“舞台”表。
事件表
id | categoryId | name
1 | 1 | Event1
2 | 2 | Event2
3 | 1 | Event3
[ ... About 100 rows ... ]
阶段表
id | categoryId |name
1 | 1 | Stage1
2 | 1 | Stage2
3 | 2 | Another Stage
[ ... About 200 rows ... ]
信息表
id | eventId | stageId | info
1 | 1 | 1 | Hello
2 | 1 | 2 | Something
3 | 1 | 1 | Else
4 | 2 | 3 | More
[ ... X00,000 rows ... ]
- All 我对信息表的查询将包含一个用于 eventId 和 stageId 的 WHERE 子句,永远不会出现我在单个查询中需要多个 eventId 和 stageId 的情况。
- 我不能只通过 stageId 查询,因为它们可以连接到多个 eventIds。
- 在我上面的例子中,eventIds 和 stageIds 不能组合在一起。
MySQL 查询并不复杂,没有连接:
SELECT * FROM info WHERE eventId = 1 AND stageId = 1
在这种情况下,我一直不确定是否应该在“信息”表上分别索引 eventId
和 stageId
列,还是一起索引多指标。那里的信息通常以“这取决于您的设置”而告终。
读取多索引是否更快?是否有可能不值得的管理费用?我应该在两者上都使用普通索引吗?
最佳答案
在您的特定情况下,最好在单个索引中使用 eventId
和 stageId
,假设这两个字段都有许多不同的值。
根据MySql documentation ,如果你有 2 个单独的索引,MySql 将只使用其中一个:
If there is a choice between multiple indexes, MySQL normally uses the index that finds the smallest number of rows.
但是,例如,如果一个字段有几十个值而另一个字段有数百万个,则最好只索引另一个以减小键大小。
关于MySQL 索引,单列还是多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53693908/