我看过很多帖子,但没有得到我的答案我有一个结构表
subject_level_id | tutor_id | level_id_fk | subject_id_fk |
118 | 99 | 4 | 1 |
119 | 99 | 3 | 2 |
120 | 99 | 3 | 3 |
121 |100 | 3 | 1 |
122 |100 | 4 | 2 |
我想提取教授特定级别的 1、2 或更多科目的导师的导师 ID(科目数量取决于用户选择的科目,但级别对于特定查询将是唯一的)
我在其他帖子的帮助下制定了一个查询,但如果科目数量超过两个,它会非常慢并且会变得更糟,因为我有 10,000 条导师记录,我的查询是:
select distinct
a.tutor_id
from
tutor_preferred_level_subject as a
inner join
tutor_preferred_level_subject as b
on a.level_id_fk = b.level_id_fk
where
a.subject_id_fk = 1 and
b.subject_id_fk = 10 and
a.level_id_fk = 3
这个问题和我的不同之处在于,我想要同时教授这两个科目的导师。
更新:是的,主要关注的是性能,这个查询对两个主题都很好,但是对于两个以上的主题,mysql服务器会永远处理。索引是subject_level_id
并且其中有近 13000 条记录,下面的查询返回大约 6500 条结果。
正如 Jakub Sacha 所要求的,这些是
EXPLAIN select distinct
a.tutor_id
from
tutor_preferred_level_subject as a
inner join
tutor_preferred_level_subject as b
on a.level_id_fk = b.level_id_fk
where
a.subject_id_fk = 1 and
b.subject_id_fk = 10 and
a.level_id_fk = 3
id select_type table type possible_keys key key_len ref|
1 SIMPLE a ALL NULL NULL NULL NULL
1 SIMPLE b ALL NULL NULL NULL NULL
rows Extra
12733 Using where; Using temporary
12733 Using where; Distinct