关于连接列和where列的mysql连接的索引

时间:2015-02-10 21:58:06

标签: mysql join indexing

我试图了解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上执行多个单个索引?还是有另一种方法可以做到这一点吗?

1 个答案:

答案 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         │
└────────────┴────────────┘