Ale*_*lex 9 sql sqlperformance oracle11g
给出下一个 SQL 语句:
Select *
from A join B
on A.id1=B.id1 and
A.id2=B.id2
where A.year=2016
and B.year=2016
Run Code Online (Sandbox Code Playgroud)
并且知道 tableA比 table 小得多B,所以我需要数据库首先按A年份访问表,然后加入,然后按B年份过滤表,我的问题是:
为提高性能而创建索引是否有意义B?(id1,id2,year)
非常感谢!
对于此查询:
Select *
from A join
B
on A.id1 = B.id1 and A.id2 = B.id2
where A.year = 2016 and B.year = 2016;
Run Code Online (Sandbox Code Playgroud)
我建议在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;
Run Code Online (Sandbox Code Playgroud)
您的问题的答案是“是”,索引B是正确的做法。在此版本中,索引中列的顺序并不重要。