假设我有一个大小合适的 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`)
...或者这是对复合索引应该如何工作的误解?