加入索引和位置

时间:2016-12-21 12:56:29

标签: sql oracle11g sqlperformance

给出下一个SQL语句:

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

并且知道表A比表B小得多,所以我需要数据库首先按年访问A表,然后加入,然后过滤B表到了一年,我的问题是:

是否有必要在B (id1,id2,year)之上创建索引,以提高效果?

非常感谢!

1 个答案:

答案 0 :(得分:1)

对于此查询:

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;

您的问题的答案是“是”,B上的索引是正确的。在这个版本中,索引中列的顺序并不重要。