以下是我的用例:我有两张table:job
和employee
使用如下多对多关系连接(我跳过了与问题无关的字段):
CREATE TABLE jobs (
id INT,
status ENUM('todo', 'in-progress', 'done')
);
CREATE TABLE employees (
id INT
);
CREATE TABLE pivot (
id INT
job_id INT
employee_id INT
);
现在我需要提取当前正在进行的工作:
SELECT j.*
FROM jobs j
JOIN pivot p ON p.job_id = j.id
WHERE p.employee_id = 123
AND j.status = "in-progress"
问题是规模。由于我必须保留历史数据,因此在jobs
中将有超过10 million
的行是done
(在pivot
中甚至更多)。因此,虽然这个选择通常会返回一到两行,但jobs.status
上的索引和pivot.employee_id
上的索引都将返回大量的行。
有没有办法创建一个同时包含jobs.status
和pivot.employee_id
的索引来提高上述查询的性能?
1条答案
按热度按时间5fjcxozz1#
你不能在MySQL中创建跨多个表的索引。
下面是我创建的索引:
pivot.id
列可能是不必要的,因为其他两列加在一起就是合适的主键。