我试图了解MySQL如何使用索引作为连接条件以及where条件。如果我进行如下连接:
SELECT * from Table1
inner join table2 on Table1.colA = Table2.colB
where Table2.colC > val1
and Table2.colC < val2;
如何对Table1和Table2进行索引,以便它有效地执行此查询?
我是否需要在Table1.colA和Table2.colB以及Table2.colC上执行多个单个索引?还是有另一种方法可以做到这一点吗?
答案 0 :(得分:0)
如何对Table1和Table2进行索引,以便它有效地执行此查询?
将每个表中的第一列设置为PK / AI(主键/自动增量)。
然后,当您需要将它们连接在一起时,您可以将tableB.colB中的第二列命名为linkToA或简单idA。这听起来有点令人困惑,所以这是一个实际的例子:
你有一张学生和教师的表格。
学生表
┌──┬────────────┬──────────┐
│id│ name │teacher_id│
├──┼────────────┼──────────┼
│1 │Billy │3 │
├──┼────────────┼──────────┼
│2 │Jeffrey │2 │
├──┼────────────┼──────────┼
│3 │Sally │3 │
├──┼────────────┼──────────┼
│4 │Frankie │1 │
└──┴────────────┴──────────┘
教师表
┌──┬────────────┬───┐
│id│ name │age│
├──┼────────────┼───┤
│1 │Jan │34 │
├──┼────────────┼───┤
│2 │Alexander │26 │
├──┼────────────┼───┤
│3 │Steve │23 │
├──┼────────────┼───┤
│4 │Joan │56 │
└──┴────────────┴───┘
现在假设你需要找到老师年龄在25到35岁之间的学生。
SELECT s.name AS student_name, t.name AS teacher_name
FROM students s
INNER JOIN teachers t ON s.teacher_id = t.id
WHERE t.age > 25 AND t.age < 35;
结果集
┌────────────┬────────────┐
│student_name│teacher_name│
├────────────┼────────────┤
│Jeffrey │Alexander │
├────────────┼────────────┤
│Frankie │Jan │
└────────────┴────────────┘