连接索引和位置

Index on join and where

给出下一个 SQL 语句:

Select * 
  from A join B
           on A.id1=B.id1 and 
              A.id2=B.id2
 where A.year=2016
   and B.year=2016

并且知道tableA比tableB小很多,所以我需要数据库先访问Atable按年,然后加入,然后按年筛选 B table,我的问题是:

(id1,id2,year) 这样在 B 上创建索引以提高性能是否有意义?

非常感谢!

对于此查询:

Select *
from A join
     B
     on A.id1 = B.id1 and A.id2 = B.id2
where A.year = 2016 and B.year = 2016;

我建议在 A(year, id1, id2)B(id1, id2, year) 上建立索引。

您也可以将查询写成:

Select *
from A join
     B
     on A.id1 = B.id1 and A.id2 = B.id2 and A.year = B.year
where A.year = 2016;

您的问题的答案是 "yes",B 上的索引是正确的做法。在此版本中,索引中列的顺序并不重要。