【发布时间】:2019-01-20 18:12:50
【问题描述】:
假设我有一个大小合适的 MySQL 表(我们将其称为 departments),其中包含一堆聚集在一起的列,如下所示:
部门表:
| id | ds_settings | ds_reports | sales_settings | sales_reports | eng_settings | eng_reports | ops_settings | ops_reports | queryable_id | queryable_type |
|----|-------------|------------|----------------|---------------|--------------|-------------|--------------|-------------|--------------|----------------|
就列而言,我们有“设置”和“报告”。查询此表时,它通常只查找给定“可查询”ID 和类型的所有设置或报告。
因此,对该表的大多数查询最终将如下所示:
SELECT ds_settings, sales_settings, eng_settings, ops_settings
FROM departments
where queryable_id = 1
AND queryable_type = "User"
为什么问题是,索引该表的正确方法是什么?包含包含所有“设置”和所有“报告”的索引是否具有设计意义,例如:
UNIQUE KEY `index_on_settings` (`queryable_id`,`queryable_type`,
`ds_settings`,`sales_settings`,`eng_settings`)
...或者这是对复合索引应该如何工作的误解?
【问题讨论】:
-
索引不会提升所选列,根据您的情况,您需要一个组合索引
KEY `indxqry` ( `queryable_id` , `queryable_type` ) -
@JawadAlShaikh 感谢您的回复 - 您是否可以推荐任何可以帮助我更好地理解您所说的概念的阅读材料?
-
@danblack answer提供完整答案,并有效参考有关索引的官方文档
-
对于这个例子,有一个 2 列的复合索引,按任意顺序。
标签: mysql database indexing compound-index